2012-11-25 69 views
0

我试图从该网站获得邮政编码:从获取数据wikisource.org网站

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工作)本人reciving错误:

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

的Web服务器可能是阻止它为某些用户代理。在您的Web浏览器中输入相同的URL并不是很好的证明。 –

+0

那不是仅仅是一次性的工作,你不需要刮数据反复做吗? – 2012-11-25 20:17:44

+0

但它总是适用于类似的代码02-000,决不适用于带有01前缀为前码。 – jankes83

回答

0

为高亮度种族在轨道怀疑,它似乎是网络服务器阻塞PHP的请求。

使用cURL代替file_get_contents()揭示的细节:

HTTP/1.0 403 Forbidden
Scripts should use an informative User-Agent string with contact information, or they may be IP-blocked without notice.

Web浏览器将在其请求一个有效的用户代理头,这就是为什么在页面加载在浏览器中确定的,但不是在PHP。

在我的测试加载在PHP这个URL,有时它的200 HTTP状态代码成功,失败等次403注意,错误消息指出脚本可以被阻塞(即有时他们可能不被阻止)。

编辑

更多信息,请参阅这个问题:How to get results from the Wikipedia API with PHP?

+0

所以我设置了我自己的user_agent,现在它工作得很完美。谢谢。 – jankes83