使用附加到URL的随机字符串刮取AJAX请求

时间:2014-10-02 16:13:21

标签: javascript ajax web-scraping

我试图通过制作浏览器AJAX请求来监控scorespro/cricket上的板球得分。通过分析Google Chrome中的网络流量,我可以看到我的浏览器发出以下表单的请求:

http://www.scorespro.com/cricket/ajax.php?g_sort=league&date=2014-10-02&mut=1412265716&sut=0&(some_random_number)

当我点击Google Chrome中的回复时,我可以看到已收到的数据。但是,当我尝试自己请求请求URL时,没有收到任何数据。为什么会发生这种情况(是否与随机字符串有关)以及如何解决它?

1 个答案:

答案 0 :(得分:0)

这是从javascript做这个要求吗?您是否考虑通过在您控制的服务器上调用脚本来抽象请求?

例如,在您的服务器上,您可以调用一个PHP脚本,例如“grabber.php”

<?php
$r = '0.' . rand(1000000000000000, 9000000000000000);

$url = 'http://www.scorespro.com/cricket/ajax.php?g_sort=league&date=2014-10-03&mut=1412328280&sut=0&' . $r;
$useragent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:32.0) Gecko/20100101 Firefox/32.0';
$referer = 'http://www.scorespro.com/cricket/';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookie.txt');
$response = curl_exec($ch);

curl_close($ch);

$data = array('payload' => $response);

echo json_encode($data);

exit();

?>

然后,您可以通过简单的ajax请求调用该页面:

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>

<script type="text/javascript">
$.ajax({
    url: 'http://yourserver.com/grabber.php',
    dataType: 'json',
    type: 'GET',
    success: function(data, textStatus, jqXHR){
        if (data['payload']){
            alert(data['payload']);
        } else {
            alert ('oops');
        }
    }
});

当然,如果你采用这种方法,你必须决定如何获取你需要从板球网站请求到抓取器脚本的URL(即从javascript传递它们或直接从PHP脚本中获取它们取决于根据您的要求)