.Net C#:从HttpWebResponse读取附件

时间:2010-04-07 16:23:24

标签: c# httpwebrequest attachment httpwebresponse

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

我有一个生成图片的java页面的网址。

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

当我在c#中尝试此操作并发出GET请求时,我会检索内容类型:text / html并且没有内容处置标题。

简单代码:

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

“response.GetResponseStream()”为空。

尝试使用java是成功的。

我是否必须准备webrequest或其他什么?

2 个答案:

答案 0 :(得分:5)

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

运行Fiddler并比较请求。

答案 1 :(得分:0)

在许多情况下,在HttpWebRequest的{​​{3}}中写东西确实有所作为。 Web服务的一种常见做法是忽略带有空UserAgent的请求。 参见:UserAgent property

只需将UserAgent属性设置为非空的string。例如,您可以使用应用程序的名称,程序集信息,模拟Webmasters: Interpretation of empty User-agent或其他标识。

示例:

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);
            }
        }
    }
}