【问题标题】:500 error when WebClient.DownloadString()WebClient.DownloadString() 时出现 500 错误
【发布时间】:2018-11-09 22:16:49
【问题描述】:

我正在尝试使用 c# 解析 html 以获取来自此 site 的所有比赛的接球率。

我正在使用此代码在另一个网站上获取匹配率,并且运行良好。

Uri url = new Uri("https://1xbetm.mobi/LineFeed/Get1x2_VZip?sports=1&count=500&lng=tr&tf=1500000&tz=3&mode=4&country=190&getEmpty=true");
WebClient client = new WebClient();
string jsonOneXBetData = client.DownloadString(url);

但是当我将 Url 更改为

Uri url = new Uri("https://www.87tempobet.com");

我收到 500 错误:(

我尝试使用Fiddler 4 阅读此网站请求操作,但我找不到正确的网址。

我尝试使用Wireshark。但我不知道如何过滤本地请求并查看网址..

所以我不知道我需要做什么..你能帮帮我吗?

【问题讨论】:

  • 500 错误是服务器端。他们可能会检测到您的用户代理不是真正的用户代理并“阻止”您。
  • 但是他们怎么能检测到我的请求呢? Web 浏览器请求和编程请求有什么区别?我不知道逻辑,也许我应该发送请求验证令牌但我已经不知道如何读取和发送。
  • 我建议你阅读一下 Selenium。
  • 我也需要问一些问题。当我第一次尝试从bets10 读取数据时,我看到了同样的错误。 500 错误。但是我查看了网络,发现了一个Api,该站点使用它来获取匹配项,并将速率设置为JSON ..但是我找不到该站点的任何数据源:(
  • 您必须从 Web 发送请求并在 fiddler 或 wireshark 中捕获该请求。然后查看请求标头。然后,您必须通过 C# 代码在 Web 客户端请求中发送这些请求标头。通常,当我们从 webclient 发送请求时,没有referrer 和 user-agent 请求标头,因此大多数站点拒绝请求。

标签: c# httprequest html-parsing webclient


【解决方案1】:

尝试如下装饰您的请求标头:

Uri url = new Uri("https://1xbetm.mobi/LineFeed/Get1x2_VZip?sports=1&count=500&lng=tr&tf=1500000&tz=3&mode=4&country=190&getEmpty=true");
System.Net.WebClient client = new System.Net.WebClient();
client.Headers.Add ("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");

string jsonOneXBetData = client.DownloadString(url);

编辑 1: 对于另一个 url,似乎还需要 2 个标头参数:

Uri url = new Uri("https://www.86tempobet.com?reloadlive=240671122&no_write_sess=1");
System.Net.WebClient client = new System.Net.WebClient();
client.Headers.Add ("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko");
client.Headers.Add("method","POST");
client.Headers.Add("cookie","{cookie}");

string jsonOneXBetData = client.DownloadString(url);

编辑 2: 这是以 json 格式访问响应的完整请求:)

Uri url = new Uri("https://www.86tempobet.com?reloadlive=240671122&no_write_sess=1");
System.Net.WebClient client = new System.Net.WebClient();
client.Headers.Add ("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");
client.Headers.Add("method","POST");
client.Headers.Add("cookie","visid_incap_1875943=C4HkVjo8RCCFldh593iChSbq6VsAAAAAQUIPAAAAAABzSYMXxV4TSKKZijRL24QX; incap_ses_277_1875943=ZnjKE7twmRYrT7s2YxvYAybq6VsAAAAAFdaEfL/KiNMUMywbnQeCNA==; GAMBLINGSESS=jfr3uadgl1ogv55c06ee6mvvs3fiv86p; nlbi_1875943=4NdhZ5rR80YChdm11QdqAQAAAAA3PlRp/yXvrsgK9rbvAEPs; _ga=GA1.2.449421393.1542056499; _gid=GA1.2.2110672116.1542056499; docscrollltop=0; LPVID=FkMTc4MDEwMzY3NDllNjU5; LPSID-34568906=eQOy1bjvTWS3lx1mTF5b3w");
client.Headers.Add("x-requested-with","XMLHttpRequest");
client.Headers.Add("betslip-hash","578c9b9896d955c14a698bf17937400a");
client.Headers.Add("content-type","application/x-www-form-urlencoded; charset=UTF-8");
client.Headers.Add("ajax-json","true");

string jsonOneXBetData = client.DownloadString(url);

【讨论】:

  • 这个网址是一个例子。它很容易从 1xbet 获得利率。我需要从86tempobet 获得费率我现在没有尝试你的方式,因为它是我的家庭项目,我现在正在工作(就像你一样:))。但是谢谢你的帮助。我会试试。 İyi çalışmalar hocam :) 祝你有美好的一天
  • 好的,对于您的特定请求,似乎还需要 2 个标头参数,即“cookie”和“method”。当我切换到时,我的请求成功了:查看编辑后的代码示例 :) Bol sanslar, ve sanada iyi calismalar usta!
  • 我试过了,但没用 :( 我能问你点什么吗?你是怎么找到这个的 Url reloadlive=240671122&no_write_sess=1
  • 您是否将 cookie 值替换为您从站点收到的本地值?源站点使用客户端脚本更新分数,我只是使用浏览器 (Chrome) 开发人员模式并检查了网络选项卡。
  • 我正在使用 chrome,但 firefox 也可以正常工作,如果您切换到网络选项卡,您将看到那些使用 http 方法“POST”的请求,选择其中一个请求并切换到表单参数,该选项卡将具有“重新加载”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多