簡體   English   中英

我應該使用帶有simplexml_load_file和file_get_contents的代理嗎?

[英]Should I use proxies with simplexml_load_file and file_get_contents?

我正在使用simplexml_load_file一段時間從多個網站獲取RSS。

有時我從其中一些網站中收到錯誤,並且大約5天后,我在2個特定網站中出現了錯誤。

這是來自simplexml_load_file的錯誤:

PHP Warning:  simplexml_load_file(http://example.com/feed): failed to open stream: Connection timed out 

PHP Warning:  simplexml_load_file(): I/O warning : failed to load external entity "http://example.com/feed" 

這是file_get_contents中的錯誤:

PHP Warning:  file_get_contents(http://example.com/page): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden

這就是我使用simplexml_load_file

simplexml_load_file( $url );

這就是我使用file_get_contents

file_get_contents( $url );

那是因為我沒有使用代理或無效的參數嗎?

更新:這兩個網站正在使用諸如防火牆或服務之類的東西來檢查機器人:

Accessing http://example.com/feed securely…
This is an automatic process. Your browser will redirect to your requested content in 5 seconds.

您所依據的假設是http://example.com/feed 總是存在並且始終准確返回您要查找的內容。 如您所知,這是一個錯誤的假設。

您正在嘗試使用file_get_contents()simplexml_load_file()訪問網絡,並發現有時這些調用會失敗。 您必須始終計划使這些調用失敗。 某些網站是否公開允許這種行為或您是否擁有非常可靠的Web主機都沒有關系。 在某些情況下,您無法控制,例如Internet主干網中斷,最終將導致您的應用程序獲得不良響應。 在您的情況下,第三方已阻止您。 這是網絡請求發生的故障之一。

首先要解決的是您必須更好地處理故障 您不能使用file_get_contents()來執行此操作,因為file_get_contents()旨在獲取文件的內容。 在我看來,允許它進行網絡調用的PHP實現者犯了一個非常嚴重的錯誤,即允許它執行此功能。 我建議使用curl:

function doRequest($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT,10);
    $output = curl_exec($ch);
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if () {
        return $output;
    } else {
        throw new Exception('Sorry, an error occurred');
    }
}

使用此功能,您將能夠為自己的用戶更好地處理錯誤(錯誤將會發生)。

您的第二個問題是此特定主機給您403錯誤。 可能是他們故意這樣做的。 我認為這是他們告訴您,他們不希望您使用這樣的網站。 但是,您將需要特別吸引他們,並詢問他們可以做什么。 他們可能會要求您使用真實的API,他們可能會完全忽略您,甚至可能告訴您要砸沙子-但我們在這里沒有任何建議可做。 嚴格來說,這是他們軟件的問題(或功能),您必須直接與他們聯系以尋求建議。

您可能會使用多個IP地址連接到網站,並在每次被阻止時輪換IP。 但是,這樣做將被視為對其服務的惡意攻擊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM