是否可以从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或其他什么?
答案 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);
}
}
}
}