[英]c# Download File from URL - not working
我试图让我的C#程序从某个地址下载文件( http://example.com/test.txt ,这不是真实地址)
我设置了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的浏览器
令我感到困惑的是为什么它提到Java语言? 我确定该文件可以直接下载。 如果我直接在chrome中输入地址( http://example.com/test.txt)-它会下载正确的文件。
我在这里做错什么了吗? 还是我需要在C#中使用其他方法来下载这些文件。
谢谢
编辑:这是chrome开发工具显示的
<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#中使用它?
请按照以下代码进行处理:
在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.');
}
}
在Web方法背后的代码中:
[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";
}
希望这对你有用...!
通过快速的Google搜索,我发现您要下载的文件托管在免费主机上,例如Byethost。 因此,与仅使用HTTP客户端相比,您将需要更多的精力来下载此资源。
通常,免费主机会在此类网页上插入JavaScript,以防止漫游器下载文件。
WebClient
只是实现HTTP规范的客户端,仅此而已。
您有两种选择:
slowAES.decrypt(c, 2, a, b)
正在使用function(cipherIn,mode,key,iv)
,因此 c
是ciperIn,即要解密的字节, 2
是modeOfOperation参数,在这种情况下为CBC, a
是关键,并且 b
是iv,也就是初始化向量。 String.IndexOf(string, int)
来获取变量a
, b
和c
String.IndexOf(string, int)
以获取字符串的索引("
仅出现3次(在分配变量a,b的过程中, c)及其后的后32个字符,即在所有3次出现中都为String.Substring(index,32)
,然后您可以使用十六进制到字节的转换器,并将它们传递给RijndaelManaged
的函数以解密密钥,然后将返回的字节转换回十六进制,并在HTTP Cookie头中传递适当的cookie(每次使用document.cookie
函数),最后在使用再次发送请求时获得文件的有效链接。原始URL附加?ckattempt = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.