在线文档教程

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