3

私はこの機能を開発しました:

sms_sentByHttp(NumPhone,MsgReceived) ->

    NumPhoneTroncated = string:sub_string(NumPhone,2),
    {X1, X2, X3} = erlang:now(),
    Rand = random:uniform(9999),
    {{Y,M,D},{H,Mn,S}}=erlang:universaltime(),
    Ws_req_id = lists:flatten(io_lib:format("~p~p~p~p~p~p~p~p", [X3, Rand,Y,M,D,H,M,S])),
   Url = io_lib:format("http://localhost:7703/enda?msg=~s&from=~s&id=~s", [http_urii:encode(MsgReceived),http_urii:encode(NumPhoneTroncated),Ws_req_id]),

    case http:request(lists:flatten(Url)) of
        {ok , A} -> io:format("response sent\n");
        {error, B} -> io:format("response not sent\n ~w\n", [B])
    end.

ここで、リクエストにタイムアウトの概念を追加し、たとえば 20 秒後に追加します。サーバーからのエラーを表示したい

私は試しました:

case http:request(lists:flatten(Url),[ {timeout,timer:seconds(20)}]) of
           {ok , A} -> io:format("response sent\n");
    {error, B} -> io:format("error from server\n ~w\n", [B])
        end.
4

1 に答える 1

4

HTTP クライアントとしてibrowseを使用することをお勧めします。send_req/6 にタイムアウト パラメータが含まれています (および、より微調整されたタイムアウトのオプション)。また、デフォルトで含まれている inets ライブラリよりも一般的に効率的です。

別のオプションはlhttpcですが、タイムアウトに環境変数を使用しているようです。これは、特定のリクエストのタイムアウトを変更する必要がある場合に問題になります。

編集:

httpc:request/4では、HTTPOptions の一部としてタイムアウトを指定できます。例:

httpc:request(get, {URL, []}, [{timeout, timer:seconds(20)}], []).
于 2013-01-03T17:12:59.927 に答える