2017-03-11 45 views
1

我有一个cronjob从不同的URL下载不同的文件并修改数据。古怪的事情是,一切运作良好,现在我想添加两个网址,但与这些网址我有一些问题...无法打开流 - DOM和File_Put_Contents

但我只是没有为什么...所有网址(8)使用相同的功能。但只有2个新的URL会引发这个错误。我不允许在此处提供网址,但我可以说,我可以在Chrome浏览器中下载这两个网址。

我打开一个URL与DOM:

function fetchXmlDocument($url, $output, $dom = null){ 
    if (!$dom instanceof DOMDocument) { 
     $dom = new DOMDocument('1.0', 'utf-8'); 
     $dom->preserveWhiteSpace = false; 
     $dom->formatOutput = true; 
    } 

    $dom->load($url); 
    $dom->save($output); 
    return $dom; 
} 

在这里,我得到这个错误:

DOMDocument::load(http://myurl.de): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden

DOMDocument::load(): I/O warning : failed to load external entity ...

另一个URL加载的fopen:

function fetchCsvDocument($url, $output){ 
    return file_put_contents($output, fopen($url, 'r')); 
} 

在这里,我得到此错误:

fopen(http://myurl.de): failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable

有人知道我该如何解决这个错误? 我只是不明白为什么我可以用我的浏览器下载URL,但PHP告诉我403甚至503.

我用这些函数下载的其他文件和修改不会引发这个错误...?

问候和谢谢你!

+0

我建议使用['libxml_set_streams_context'](http://php.net/manual/ en/function.libxml-set-streams-context.php)来设置用户代理。如果不起作用,请尝试使用提供更多选项并返回更多信息的'cURL'加载文件。有关[http状态代码]的更多信息(https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) –

回答

0

403禁止:

服务器最有可能检测到的请求不是来自浏览器(也许不喜欢),和/或服务器需要一些会话状态(该浏览器发送的,但你的代码可能不会)。

要查看浏览器和服务器之间发送的内容,请在Chrome中按F12并选择网络,然后单击链接以查看HTTP标头。

503服务暂时不可用可能是相同的原因(如果该网址也适用于浏览器)。

还检查http与https。

另一个原因可能是该URL不能正常encoded(即替换%20空间)的浏览器自动完成

相关问题