【发布时间】:2020-10-09 02:47:04
【问题描述】:
一段时间以来,我们一直在使用来自某个网站的信息(如果您提及来源并且我们这样做,该网站允许这样做)并且我们一直在手动复制信息。你可以想象这很快就会变得乏味,所以我一直在尝试通过使用 PHP 脚本获取信息来自动化这个过程。
我要获取的网址是:
http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46 08-11-10 14-11-10
如果我在浏览器中输入它可以工作,如果我尝试 file_get_contents() 我得到 Bad Request
我认为他们检查了客户端是否是浏览器,所以我推出了基于 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);
我已检查,标题与我的浏览器的标题相同,但我仍然收到 Bad Request
所以我尝试了另一种解决方案:
http://www.php.net/manual/en/function.curl-setopt.php#78046
不幸的是,这也不起作用,我没有想法。我错过了什么?
【问题讨论】:
-
在调用
file_get_contents之前,您是否在URL上使用了urlencode? -
妈的,太丢人了……我怎么能错过呢?
-
好吧,它甚至可以使用 file_get_contents(),所以没有任何保护。很抱歉浪费大家的时间:)
-
@pandronic:我建议仍然掩盖它。他们可能正在查看日志并且可能不喜欢人们抓取数据,因此请采取预防措施以防止他们阻止自动化工具。 (只是我的 0.02 美元)
-
只是补充一下,有时对于 https url 你需要关闭 verify_peer curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
标签: php curl user-agent