从wikisource.org网站获取数据

时间:2012-11-25 20:11:24

标签: php wikimedia

我正在尝试从此网站获取邮政编码:

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 

页面地址是正确的,您可以在网络浏览器中复制并通过它,它可以正常工作。 有什么想法吗?

1 个答案:

答案 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?