当我尝试使用PHP的file_get_contents()
函数访问非英语(Unicode)URL时,我收到此错误。该网址为:http://ml.wikipedia.org/wiki/%E0%B4%B2%E0%B4%AF%E0%B4%A3%E0%B5%BD_%E0%B4%AE%E0%B5%86%E0%B4%B8%E0%B5%8D%E0%B4%B8%E0%B4%BF
我有这个错误:
警告:file_get_contents(http://ml.wikipedia.org/wiki/%E0%B4%B2%E0%B4%AF%E0%B4%A3%E0%B5%BD_%E0%B4%AE% E0%B5%86%E0%B4%B8%E0%B5%8D%E0%B4%B8%E0%B4%BF)[function.file-get-contents]:无法打开流:HTTP请求失败! HTTP / 1.0 403 Forbidden ..
致命错误:在第8行的G:\ xampp \ htdocs \ codes \ htmlParse1.php中的非对象上调用成员函数find()
file_get_contents()
功能有限制吗?它只接受英文网址吗?
答案 0 :(得分:3)
您缺少用户代理等标头信息。我建议你只使用curl
$url = 'http://ml.wikipedia.org/wiki/%E0%B4%B2%E0%B4%AF%E0%B4%A3%E0%B5%BD_%E0%B4%AE%E0%B5%86%E0%B4%B8%E0%B5%8D%E0%B4%B8%E0%B4%BF';
$ch = curl_init($url); // initialize curl handle
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17");
curl_setopt($ch, CURLOPT_REFERER, "http://ml.wikipedia.org");
curl_setopt($ch, CURLOPT_ENCODING, "UTF-8");
$data = curl_exec($ch);
print($data);
如果必须使用file_get_content
$options = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" .
"Cookie: centralnotice_bucket=0-4.2; clicktracking-session=M7EcNiC2Zcuko7exVGUvLfdwxzSK3Boap; narayam-scheme=ml\r\n" .
"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17"
)
);
$url = 'http://ml.wikipedia.org/wiki/%E0%B4%B2%E0%B4%AF%E0%B4%A3%E0%B5%BD_%E0%B4%AE%E0%B5%86%E0%B4%B8%E0%B5%8D%E0%B4%B8%E0%B4%BF';
$context = stream_context_create($options);
$file = file_get_contents($url, false, $context);
echo $file ;
答案 1 :(得分:1)
如果有403 Forbidden
,则连接应该有效。
这只是一个警告,网络服务器响应状态代码403.维基百科拒绝下载没有有效的用户代理:
脚本应使用带有联系信息的信息性用户代理字符串,否则可能会被IP阻止,恕不另行通知。
第二个错误应来自处理file_get_contents(...)
调用的结果(String对象)的下一行。
修改:您应该尝试使用例如设置用户代理在执行请求之前ini_set('user_agent', 'wikiPHP');
。这应该可以正常工作。