我试图让我的C#程序从地址(http://example.com/test.txt下载文件,obvs这不是真正的地址)
我设置了Webclient并使用DownloadFile(),如下所示:
WebClient client = new WebClient();
string filename = @"C:\test_dwl.txt";
client.DownloadFile("http://example.com/test.txt", filename);
我知道test.txt文件应该包含什么。但是,在运行我的c#代码,然后打开C:\ test_dwl.txt后,它不包含预期的数据。
它只是说:
此网站需要使用Javascript,请在您的浏览器中启用Javascript或使用支持Javascript的浏览器
让我感到困惑的是为什么提到Javascript?我确定该文件可以直接下载。如果我直接将地址输入chrome(http://example.com/test.txt) - 它会下载正确的文件。
我在这里做错了吗?或者我是否需要在C#中使用其他方法来下载这些文件。
由于
编辑:这是chrome dev工具展示
<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("e99c963ef2ec3e7d2f9e25eb2b02827b");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; document.cookie="referrer="+escape(document.referrer); location.href="http://example.com/test.txt?ckattempt=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>
我如何在c#??
中使用它答案 0 :(得分:1)
请按照以下代码处理:
在Js文件中:
var file_name = response.value[0]["name"];
var downloadurl = response.value[0]"@microsoft.graph.downloadUrl"];
// --------------------------------------------- -------------------------- //
function HandleIT(downloadurl,file_name) {
PageMethods.ProcessIT(downloadurl,file_name, onSucess, onError);
function onSucess(result) {
alert(result);
}
function onError(result) {
alert('Something wrong.');
}
}
在我们的代码中,Webmethod:
[WebMethod]
public static string ProcessIT(string downloadURL, string file_name)
{
// Create a new WebClient instance.
WebClient myWebClient = new WebClient();
string path = @"c:\";
string path_n_name = path + file_name;
// Download the Web resource and save it into the current filesystem folder.
myWebClient.DownloadFile(downloadURL, path_n_name);
return "SUCCESS";
}
希望它适合你......!
答案 1 :(得分:0)
通过快速谷歌搜索,我发现您尝试下载的文件托管在像Byethost这样的免费主机上。因此,与简单地使用HTTP客户端相比,您需要更多的努力来下载此资源
通常,免费主机会将JavaScript插入此类页面,以防止机器人下载文件
WebClient
只是一个实现HTTP规范的客户端,而不是其他任何东西。
您有两种选择:
slowAES.decrypt(c, 2, a, b)
正在使用function(cipherIn,mode,key,iv)
,所以c
是ciperIn,即要解密的字节,2
是modeOfOperation参数,在这种情况下是CBC,a
是关键,而且
b
是iv,也就是初始化向量
您可以使用正则表达式获取变量a
,b
和c
,或者仅使用String.IndexOf(string, int)
获取字符串("
的索引出现(在变量a,b,c的赋值期间)和接下来的32个字符,即所有3次出现的String.Substring(index,32)
。然后你可以使用一个十六进制到字节的转换器并将它们传递给RijndaelManaged
的函数来解密密钥,然后将返回的字节转换回十六进制并传递HTTP Cookie头中的相应cookie(每次使用document.cookie
函数时,最后在第二次发送请求时获取文件的有效链接,并附加原始URL?ckattempt = 1