如何将PHP脚本伪装成浏览器?

时间:2010-11-15 13:36:10

标签: php curl user-agent

我们一直在使用来自网站的信息一段时间(如果您提及来源我们这样做,网站允许的内容)我们一直在手动复制信息。你可以想象这可能会变得很乏味,所以我一直试图通过PHP脚本获取信息来自动完成这个过程。

我要提取的网址是:

http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46 08-11-10 14-11-10

如果我在浏览器中输入它,那么如果我尝试使用file_get_contents(),我会收到错误请求

我认为他们检查了客户端是否是浏览器,因此我推出了基于CURL的解决方案:

$ch = curl_init();

$header=array(
  'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12',
  'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language: en-us,en;q=0.5',
  'Accept-Encoding: gzip,deflate',
  'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
  'Keep-Alive: 115',
  'Connection: keep-alive',
);

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_COOKIEFILE,'cookies.txt');
curl_setopt($ch,CURLOPT_COOKIEJAR,'cookies.txt');
curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
$result=curl_exec($ch);

curl_close($ch);

我已经检查过,标题与我的浏览器标题相同,但我仍然会收到错误请求

所以我尝试了另一个解决方案:

http://www.php.net/manual/en/function.curl-setopt.php#78046

不幸的是,这也不起作用,我没有想法。我错过了什么?

3 个答案:

答案 0 :(得分:12)

尝试转义您的网址,这样就适合我。

http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46%2008-11-10%2014-11-10

答案 1 :(得分:11)

使用curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');

当然,你可以用另一个替换使用者。

但是,“错误请求”很可能与丢失/不良的使用者无关。听起来网络服务器本身并不喜欢你的请求..不是所请求的URI背后的应用程序。

答案 2 :(得分:0)

我不得不从$ header中丢失“ Accept-Encoding:gzip,deflate”,才能使其在我的Godaddy网站上正常工作。