5

是否可以从中读取图像附件System.Net.HttpWebResponse

我有一个生成图像的 java 页面的 url。

当我在 Firefox 中打开 url 时,会出现下载对话框。内容类型为 application/png。
似乎工作。

当我在 c# 中尝试此操作并发出 GET 请求时,我检索了 content-type: text/html 并且没有 content-disposition 标头。

简单代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

response.GetResponseStream()是空的。

尝试使用 java 成功。

我是否必须准备 webrequest 或其他东西?

4

2 回答 2

5

您可能需要设置一个 User-Agent 标头。

运行Fiddler并比较请求。

于 2010-04-07T16:24:36.700 回答
1

UserAgent在很多情况下,在属性中写一些东西HttpWebRequest确实会有所作为。Web 服务的一种常见做法似乎是忽略带有空UserAgent. 请参阅:网站管理员:空用户代理的解释

只需将UserAgent属性设置为非空string。例如,您可以使用您的应用程序的名称、程序集信息、模拟一个常见的 UserAgent或其他标识。

例子:

request.UserAgent = "my example program v1";
request.UserAgent = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name.ToString()} v{System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()}";
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36";

只是举一个完整的工作示例:

using System.IO;
using System.Net;

void DownloadFile(Uri uri, string filename)
{
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
    request.Timeout = 10000;
    request.Method = "GET";
    request.UserAgent = "my example program v1";
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        using (Stream receiveStream = response.GetResponseStream())
        {
            using (FileStream fileStream = File.Create(filename))
            {
                receiveStream.CopyTo(fileStream);
            }
        }
    }
}
于 2019-08-29T10:14:14.073 回答