Http 网页在不同的请求下返回不同的状态代码
这是我项目代码的一部分Http 网页在不同的请求下返回不同的状态代码,http,erlang,wget,http-status-code-503,httpc,Http,Erlang,Wget,Http Status Code 503,Httpc,这是我项目代码的一部分 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 %%
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
URL=”http://www.amazon.com",
HTTPOpts=[{autoredirect,false}],
案例httpc:request(get,{URL,[{“用户代理”,“Mozilla”}]},HTTPOpts,[])
{ok,{{{{},Code,{},Headers,Body}当Code==200->
%%工艺代码代码=200%%
{ok,{{{{},Code,{},Headers,{}当Code<310,Code>=300->
%%重定向
{ok,{{{{},Code,{},Headers,{}当Code==503->
%%服务不可用
问题是当我执行http
请求时,它返回不同的状态代码
在上面的URL
的情况下,我得到了两个响应,code=200
和code=503
,我如何处理这个问题,以便总是得到code=200
我还使用wget“www.amazon.com”
进行了尝试,得到了相同的结果
我的想法是:在code=503
的情况下重新请求,但这个问题可能会进入循环,并且可能永远不会返回code=200
,或者在多次迭代后返回,这会导致客户端请求延迟
如何解决这个问题?作为开发人员,我们无法控制我们试图与之交谈的第三方系统的响应。在您提供的示例中,亚马逊似乎故意拒绝您的访问,因为他们怀疑您是机器人或刮刀。只要得到一个503,就可以通过查看响应体来证明这一点 作为一名开发人员,您可以做的是适应连接到某个系统时可能出现的每种情况 对于HTTP,当遇到5xx错误代码时,通常需要重试请求。为了防止自己陷入循环,实现指数退避,并限制代码重试的次数 HTTP4xx错误代码通常表示您的请求有问题。您不想在这里重试,只需看看您的请求可能有什么问题
对于您的特殊情况,因为亚马逊认为您是一个自动访问者,所以请尝试模仿普通的web浏览器。从
用户代理
头、cookies等开始。作为开发人员,我们无法控制我们试图与之交谈的第三方系统的响应。在您提供的示例中,亚马逊似乎故意拒绝您的访问,因为他们怀疑您是机器人或刮刀。只要得到一个503,就可以通过查看响应体来证明这一点
作为一名开发人员,您可以做的是适应连接到某个系统时可能出现的每种情况
对于HTTP,当遇到5xx错误代码时,通常需要重试请求。为了防止自己陷入循环,实现指数退避,并限制代码重试的次数
HTTP4xx错误代码通常表示您的请求有问题。您不想在这里重试,只需看看您的请求可能有什么问题
对于您的特殊情况,因为亚马逊认为您是一个自动访问者,所以请尝试模仿普通的web浏览器。从用户代理
标题、cookie等开始