【发布时间】:2016-11-17 17:43:45
【问题描述】:
我正在为 Pixiv 构建一个 API,到目前为止,我已经成功完成了登录过程,并且按标签搜索也可以。
现在我想下载所选网页上的图片。起初我遇到了一些证书错误。我通过暂时忽略证书验证来解决这个问题。
然后发生了一件非常有趣的事情......如果 Fiddler 在后台运行 - 成功收到响应并且我能够下载图像。没有任何问题。
但是当 Fiddler 没有运行时,远程服务器返回 421 错误代码。
我已经尝试过的事情:
- 手动关闭每个响应并使用“使用”语句
- 强制使用 Keep-Alive 标头。
- 明确声明使用 HTTP/1.1
- 更改 HttpWebRequest 对象的代理设置
我的图片请求代码如下:
HttpWebRequest imagerequest = (HttpWebRequest)WebRequest.Create(imgLink);
imagerequest.Host = $"i.pximg.net";
imagerequest.UserAgent = USER_AGENT;
imagerequest.Accept = "image/webp,image/*,*/*;q=0.8";
imagerequest.Referer = post.PostLink;
imagerequest.Headers.Add("Accept-Encoding", "gzip, deflate, sdch, br");
imagerequest.Headers.Add("Accept-Language", "en-US,en;q=0.8,sl;q=0.6");
byte[] imagecontent;
using (var imageresponse = (HttpWebResponse)imagerequest.GetResponse())
{
using (var imagestream = imageresponse.GetResponseStream())
{
imagecontent = imagestream.ReadStream();
}
}
(我还在此之前发送了一个请求以获取图片链接)
“imgLink”示例:
https://i3.pixiv.net/img-original/img/2014/02/09/00/10/03/41485846_p0.jpg
Fiddler 将发送的请求显示为:
GET https://i.pximg.net/img-original/img/2014/02/09/00/10/03/41485846_p0.jpg HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36
Accept: image/webp,image/*,*/*;q=0.8
Referer: http://www.pixiv.net/whitecube/user/2824699/illust/41485846
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8,sl;q=0.6
Host: i.pximg.net
Fiddler 没有显示任何违反 HTTP 协议的迹象。
【问题讨论】:
-
Fiddler 在运行您的应用程序流量时是否显示任何“HTTP 协议违规”警告?
imgLink变量的示例值是什么 - 它是否指定相同的i.pximg.net主机名? -
编辑了问题。添加了“imgLink”的示例以及 Fiddler 显示的内容。查看 Fiddler 的请求原始数据时,“imgLink”中的“3”似乎消失了
-
如果您将
.Host值更正为正确的值 (i3.pixiv.net),这有帮助吗?
标签: c# http httpwebrequest fiddler