4. HTTP Client
4 HTTP 客户端
4.1 配置
HTTP客户端默认配置文件在Inets
应用程序启动时启动,然后可用于 Erlang 节点上的所有进程。其他配置文件也可以在应用程序启动时启动,或者配置文件可以在运行时动态启动和停止。每个客户端配置文件都会产生一个新的进程来处理每个请求,除非持久连接可以使用或不使用流水线。如果请求中没有这样的头文件,客户端会添加一个host
头文件和一个空头te
文件。
只要基础机制也这样做,客户端就支持 IPv6。
以下内容将放入 Erlang 节点应用程序配置文件中以在应用程序启动时启动配置文件:
[{inets, [{services, [{httpc, PropertyList}]}]}]
有关有效的属性,请参阅httpc(3)
。
4.2 入门
开始Inets
:
1 > inets:start().
ok
以下调用使用默认的客户端配置文件。使用代理"www-proxy.mycompany.com:8000"
,除了从本地主机的请求。这适用于以下所有请求。
示例:
2 > httpc:set_options([{proxy, {{"www-proxy.mycompany.com", 8000},
["localhost"]}}]).
ok
以下是一个普通的同步请求:
3 > {ok, {{Version, 200, ReasonPhrase}, Headers, Body}} =
httpc:request(get, {"http://www.erlang.org", []}, [], []).
在提供所有默认值的情况下,获取请求也可以写成如下形式:
4 > {ok, {{Version, 200, ReasonPhrase}, Headers, Body}} =
httpc:request("http://www.erlang.org").
以下是一个普通的异步请求:
5 > {ok, RequestId} =
httpc:request(get, {"http://www.erlang.org", []}, [], [{sync, false}]).
结果被发送到调用进程{http, {ReqestId, Result}}
。
在这种情况下,调用进程是 shell,因此会收到以下结果:
6 > receive {http, {RequestId, Result}} -> ok after 500 -> error end.
ok
这发送一个带有指定连接头的请求:
7 > {ok, {{NewVersion, 200, NewReasonPhrase}, NewHeaders, NewBody}} =
httpc:request(get, {"http://www.erlang.org", [{"connection", "close"}]},
[], []).
启动 HTTP 客户端配置文件:
8 > {ok, Pid} = inets:start(httpc, [{profile, foo}]).
{ok, <0.45.0>}
新配置文件没有代理设置,因此连接被拒绝:
9 > httpc:request("http://www.erlang.org", foo).
{error, econnrefused}
停止 HTTP 客户端配置文件:
10 > inets:stop(httpc, foo).
ok
停止 HTTP 客户端配置文件的替代方法:
10 > inets:stop(httpc, Pid).
ok