从内部称为AJAX的地址中删除数据


Scraping data from an internally-called AJAX address

我正试图从以下地址获取联赛数据:

http://www.10bet.com/sports/soccer/?utm_source=shp&utm_medium=sleft&utm_campaign=足球

在该页面中,例如,如果你点击"冠军联赛",在Firebug中,我会看到一个AJAX调用到此地址:

http://www.10bet.com/pagemethods.aspx/GetLeaguesContent

结果是一个JSON对象,其中包含来自该联盟的匹配信息。然而,当我得到带有cURL的页面时,即使我发布了确切的参数,我也会得到一堆JavaScript代码:

$url = 'http://www.10bet.com/pagemethods.aspx/GetLeaguesContent';
$fields = array(    
        'BranchID' => urlencode('1') , 
        'LeaguesCollection' => urlencode('10098') , 
                );
$fields_string  = '';
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

我快速查看了一下,大约一分钟后就发现了问题。这是一个丢失的请求标头。我不会告诉你是哪一个,但我会告诉你我是如何发现它的,这样下次你就可以自己做了。

首先,安装Charles代理并运行它。在Chrome中打开该页面。当浏览器发出请求时,它将显示在Charles中。

现在突出显示有问题的请求,然后右键单击菜单上的"编辑"。只需开始一次一个地删除您认为可能有问题的标头,然后重新执行请求。当它发送javascript时,您将知道您删除的最后一个标头就是那个标头。