2017-02-25 130 views
0

這是我的項目代碼的一部分。網頁返回不同請求的不同狀態代碼

URL="http://www.amazon.com", 
HTTPOpts = [{autoredirect, false}], 
case httpc:request(get, {URL, [{"User-Agent", "Mozilla"}]}, HTTPOpts, []) of 
{ok, {{_, Code, _}, Headers, Body}} when Code == 200 -> 

    %%code for process code=200 %% 

    {ok, {{_, Code, _}, Headers, _}} when Code < 310 , Code >= 300 -> 

    %% redirection 

    {ok, {{_, Code, _}, Headers, _}} when Code ==503 -> 

    %%service unavailable 

問題是,當我執行http請求,將返回不同的狀態代碼。

URL情況下,上述我得到兩個響應,Code = 200Code = 503,我該如何處理這個問題,讓我總是Code = 200

我也嘗試過使用wget "www.amazon.com",它給了相同的結果。

我的想法:重新請求在Code = 503情況,但問題這一點,可能會進入循環,並可能永遠不會返回Code = 200或經過多次迭代,從而產生在客戶端請求的延遲恢復。

如何解決?

回答

2

作爲開發人員,我們無法控制我們試圖與之交談的第三方系統的響應。在你提供的例子中,亞馬遜似乎是故意拒絕你訪問,因爲他們懷疑你是機器人還是刮板。只要您收到,就可以通過查看響應主體來證明這一點。

作爲一名開發人員,您可以做什麼,以適應連接到特定系統時可能發生的每種可能情況。

對於HTTP,當您遇到5xx錯誤代碼時,通常您需要重試您的請求。爲了防止自己陷入循環,實施指數退避,限制您允許代碼重試的次數。

HTTP 4xx錯誤代碼通常表示您的請求有問題。你不想在這裏重試,只要看看你的請求有什麼問題。

對於您的特殊情況,由於亞馬遜認爲您是自動訪問者,請嘗試模仿正常的網絡瀏覽器。開始於User-agent標題,cookies等

相關問題