我们一直在使用来自网站的信息一段时间(如果您提及来源我们这样做,网站允许的内容)我们一直在手动复制信息。你可以想象这可能会变得很乏味,所以我一直试图通过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
不幸的是,这也不起作用,我没有想法。我错过了什么?
答案 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网站上正常工作。