Erlang の ibrowse API を使用しています。問題は、別の Web ページにリダイレクトする Web ページを読み取ろうとすると、空白になることです。最終ページまでトレースをたどる方法についてのアイデアはありますか?
現時点で私が持っているものは次のとおりです。
get_web(Src) ->
ibrowse:start(),
{_,_,_,Body} = ibrowse:send_req(Src, [], get),
Body.
ありがとう
Erlang の ibrowse API を使用しています。問題は、別の Web ページにリダイレクトする Web ページを読み取ろうとすると、空白になることです。最終ページまでトレースをたどる方法についてのアイデアはありますか?
現時点で私が持っているものは次のとおりです。
get_web(Src) ->
ibrowse:start(),
{_,_,_,Body} = ibrowse:send_req(Src, [], get),
Body.
ありがとう
Location
301 または 302 ステータス コードがある場合は、応答のヘッダーに従う必要があります。
get_web({url,Src}) ->
ibrowse:start(),
{ok, Status, Head, Body} = ibrowse:send_req(Src, [], get),
if
Status =:= 200 ->
Body;
Status =:= 301 orelse Status =:= 302 ->
get_web(get_location(Head))
end.
get_location(Head) ->
case lists:keyfind("Location", 1, Head) of
false -> {url, error};
URL -> {url, URL}
end.
誰かがこれに出くわした場合、これが私がやったことです:
get_web({_,error}) ->
error;
get_web({url,Src}) ->
ibrowse:start(),
{_,_,Head,Body} = ibrowse:send_req(Src, [], get),
if
length(Body) == 0 ->
get_web(get_location(Head));
true ->
Body
end.
get_location([]) ->
{url,error};
get_location([{"Location",URL}|_]) ->
{url,URL};
get_location([_|T]) ->
get_location(T).