0

我正在尝试从该站点获取邮政编码:

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 

页面地址正确,您可以在网络浏览器中复制并粘贴它,它可以工作。有任何想法吗?

4

1 回答 1

0

正如 Orbit 中的 Lightness Races 所怀疑的那样,网络服务器似乎确实阻止了 PHP 的请求。

使用cURL而不是file_get_contents()揭示细节:

HTTP/1.0 403 Forbidden
脚本应使用包含联系信息的用户代理字符串,否则它们可能会被 IP 阻止,恕不另行通知。

Web 浏览器在其请求中发送一个有效的 User-Agent 标头,这就是页面在您的浏览器中加载正常但在 PHP 中加载不正常的原因。

在我在 PHP 中加载此 URL 的测试中,有时它会以 200 的 HTTP 状态代码成功,有时它会以 403 失败。请注意,错误消息说脚本可能被阻止(即,有时它们可​​能不会被阻止)。

编辑

有关更多信息,请参阅此问题:如何使用 PHP 从 Wikipedia API 获取结果?

于 2012-11-25T21:05:36.400 回答