【问题标题】:Server returns 421 HTTP error when Fiddler is not runningFiddler 未运行时服务器返回 421 HTTP 错误
【发布时间】: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


【解决方案1】:

好像我只是瞎了。 “imgLink”一直设置了错误的主机名,但我没有注意到它,因为主机名非常相似。我猜 Fiddler 会自动为我解决这个问题……

下次我一定会三重检查主机名。感谢您的所有帮助。

【讨论】:

  • 是的,Fiddler 应该在每次修复它时都会显示“HTTP 协议违规”;如果您没有将 Fiddler 配置为显示违规,您应该在工具 > Fiddler 选项 > 常规 > 协议违规中至少启用 Warn on critical errors
  • 我已经设置好了,但没有收到任何警告。也许我应该将其设置为 Warn on all errors
猜你喜欢
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 2018-05-29
相关资源
最近更新 更多