我正在尝试从此网站获取邮政编码:
http://pl.wikisource.org/wiki/Lista_kod%C3%B3w_pocztowych_w_Polsce
我的代码很简单:
<?php
$postalCode = $_GET['code'];
$httpAddr = 'http://pl.wikisource.org/wiki/Lista_kod%C3%B3w_pocztowych_w_Polsce/Okr%C4%99g_'.$postalCode[0].'_'.$postalCode[0].$postalCode[1].'-xxx';
file_get_contents($httpAddr);
?>
但是当我将$ postalCode设置为03-000(也是01-000,05-000,但是07-000,61-000,62-000正在工作)时,我正在发现错误:
Warning: file_get_contents(http://pl.wikisource.org/wiki/Lista_kod%C3%B3w_pocztowych_w_Polsce/Okr%C4%99g_0_03-xxx): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /var/www/clients/client1/web4/web/ofix/test.php on line 5
页面地址是正确的,您可以在网络浏览器中复制并通过它,它可以正常工作。 有什么想法吗?
答案 0 :(得分:0)
由于可疑轨道中的Lightness Races,似乎网络服务器阻止了PHP的请求。
使用cURL代替file_get_contents()
会显示详细信息:
HTTP/1.0 403 Forbidden
脚本应使用带有联系信息的信息性用户代理字符串,否则可能会被IP阻止,恕不另行通知。
Web浏览器在其请求中发送有效的User-Agent标头,这就是为什么页面在浏览器中加载OK而不在PHP中加载。
在我在PHP中加载此URL的测试中,有时它会成功使用HTTP状态代码200,有时会因403失败而出现问题。请注意,错误消息显示脚本可能被阻止(即。有时他们可能不被阻止。)
修改强>
有关详细信息,请参阅此问题:How to get results from the Wikipedia API with PHP?