为了账号安全,请及时绑定邮箱和手机立即绑定

WebHttpRequest 失败 (500),而邮递员成功运行 Web GET 请求

WebHttpRequest 失败 (500),而邮递员成功运行 Web GET 请求

C#
哈士奇WWW 2021-11-21 10:40:45
我尝试从特定站点获取特定值...该站点使用对https://www.plus500.co.il/api/LiveData/FeedUpdate?instrumentId=19的 Ajax 调用定期更新该值(您可以导航到该地址并查看您获得的 XML 响应。)使用邮递员:发送GET /api/LiveData/FeedUpdate?instrumentId=19 HTTP/1.1Host: www.plus500.co.ilCache-Control: no-cachePostman-Token: f823c87d-3edc-68ce-e1e7-02a8fc68be7a我得到一个有效的 Json 响应...不过,当我从 C# 尝试它时:var webRequest = WebRequest.CreateHttp(@"https://www.plus500.co.il/api/LiveData/FeedUpdate?instrumentId=19");webRequest.Method = "GET";using (var response = webRequest.GetResponse()){...}请求失败,错误代码 403(禁止)添加时:webRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36";请求失败,错误代码 500(内部服务器错误)添加(编辑)我也开始ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 |                                   SecurityProtocolType.Tls11 |                                   SecurityProtocolType.Tls |                                   SecurityProtocolType.Ssl3;另外,我尝试设置一个 CookieContainer,但结果是相同的 500。为什么 Postman/Chrome 成功查询这个 API 而 C# Webrequest 没有?有什么不同?
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

因此,失败的原因是默认情况下邮件头包含在来自邮递员的客户端请求中,尽管不是来自 C# 请求。


使用像 Fiddler ( https://www.telerik.com/fiddler )这样的程序,您可以查看请求以查看邮递员请求的标头是:


Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8    

Accept-Encoding: gzip, deflate, br    

Accept-Language: en-US,en;q=0.9    

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36

然而从 C# 只是


User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

像这样填写额外的客户端请求标头可以让它顺利通过:


webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";

webRequest.Headers.Add("Accept-Encoding", "gzip deflate,br");

webRequest.Headers.Add("Accept-Language", "en-US,en;q=0.9");


查看完整回答
反对 回复 2021-11-21
  • 1 回答
  • 0 关注
  • 257 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信