首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

4. HTTP Client

4.1 配置

HTTP客户端默认配置文件在Inets应用程序启动时启动,然后可用于 Erlang 节点上的所有进程。其他配置文件也可以在应用程序启动时启动,或者配置文件可以在运行时动态启动和停止。每个客户端配置文件都会产生一个新的进程来处理每个请求,除非持久连接可以使用或不使用流水线。如果请求中没有这样的头文件,客户端会添加一个host头文件和一个空头te文件。

只要基础机制也这样做,客户端就支持 IPv6。

以下内容将放入 Erlang 节点应用程序配置文件中以在应用程序启动时启动配置文件:

代码语言:javascript
复制
[{inets, [{services, [{httpc, PropertyList}]}]}]

有关有效的属性,请参阅httpc(3)

4.2 入门

开始Inets

代码语言:javascript
复制
1 > inets:start().
     ok

以下调用使用默认的客户端配置文件。使用代理"www-proxy.mycompany.com:8000",除了从本地主机的请求。这适用于以下所有请求。

示例:

代码语言:javascript
复制
2 > httpc:set_options([{proxy, {{"www-proxy.mycompany.com", 8000},
["localhost"]}}]).
ok

以下是一个普通的同步请求:

代码语言:javascript
复制
3 > {ok, {{Version, 200, ReasonPhrase}, Headers, Body}} =
httpc:request(get, {"http://www.erlang.org", []}, [], []).

在提供所有默认值的情况下,获取请求也可以写成如下形式:

代码语言:javascript
复制
4 > {ok, {{Version, 200, ReasonPhrase}, Headers, Body}} =
httpc:request("http://www.erlang.org").

以下是一个普通的异步请求:

代码语言:javascript
复制
5 > {ok, RequestId} =
httpc:request(get, {"http://www.erlang.org", []}, [], [{sync, false}]).

结果被发送到调用进程{http, {ReqestId, Result}}

在这种情况下,调用进程是 shell,因此会收到以下结果:

代码语言:javascript
复制
6 > receive {http, {RequestId, Result}} -> ok after 500 -> error end.
ok

这发送一个带有指定连接头的请求:

代码语言:javascript
复制
7 > {ok, {{NewVersion, 200, NewReasonPhrase}, NewHeaders, NewBody}} =
httpc:request(get, {"http://www.erlang.org", [{"connection", "close"}]},
[], []).

启动 HTTP 客户端配置文件:

代码语言:javascript
复制
8 > {ok, Pid} = inets:start(httpc, [{profile, foo}]).
{ok, <0.45.0>}       

新配置文件没有代理设置,因此连接被拒绝:

代码语言:javascript
复制
9 > httpc:request("http://www.erlang.org", foo). 
{error, econnrefused}

停止 HTTP 客户端配置文件:

代码语言:javascript
复制
10 > inets:stop(httpc, foo).
ok

停止 HTTP 客户端配置文件的替代方法:

代码语言:javascript
复制
10 > inets:stop(httpc, Pid).
ok

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com