`
litaocheng
  • 浏览: 337658 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用inets http:request时请注意?

阅读更多
这两天在调试程序,今天刚刚去除了一个小bug:使用inets http client进行Post请求时,mochiweb 总是接收错误,开始怀疑json encode错误,否决;后来想到是不是http request错误呢?认真查看文档:
request(Method, Request, HTTPOptions, Options)
request() - {url(), headers(), content_type(), body()}
body() = string() | binary()
哦,原来是我没有认真的查看文档,这里的body是string或binary,不再是iolist了,而我使用mochijson2 encode后的数据是一个deep list,怪我把参数传递错了,没有认真看文档!

这里之所以疏忽,是因为我一直牢记Efficiency Guide 5.3 Deep and flat lists中的一条建议:
When sending data to a port. Ports understand deep lists so there is no reason to flatten the list before sending it to the port.

Post的数据毫无疑问是要通过gen_tcp发送的,最后也是要通过port发送的,所以我想都没有想就没有调用lists:flatten/1对数据进行处理。可是到了这里没有想到,风头一转,在httpc_request的body_length中,使用length(Body)获取Post数据长度。晕倒。

下面是R12B-5中相关的文档信息
http:request(Method, Request, HTTPOptions, Options)
request() - {url(), headers(), content_type(), body()} 
body() = string() | binary()

gen_tcp:send(Socket, Packet)
Packet = [char()] | binary()
(实际中Packet可以为iodata())

erlang:port_command(Port, Data)
Data = iodata()
iodata() = iolist() | binary()
iolist() = [char() | binary() | iolist()]


本质上这几个函数都是调用port进行数据发送
为什么参数不统一都采用iodata呢?

分享到:
评论

相关推荐

    rest_service:简单的基于牛仔的 REST 服务

    休息服务简单的基于牛仔的 REST web 服务... ok 与服务交互: 1 > inets : start (). ok 2 > httpc : request ( get , { " http://localhost:8080/resource/123 " , []}, [], []). { ok ,{{ " HTTP/1.1 " , 404 , " No

    Inets mod_xsl-开源

    2. **API接口**:在API接口返回XML数据时,可以使用mod_xsl将其转换为JSON或其他格式,方便前端或者客户端应用处理。 3. **数据交换**:在不同系统间进行XML数据交换时,如果目标系统不支持XML,可以使用此模块进行...

    erlang-inets-19.3.6.4-1.el7.x86_64.rpm

    erlang-inets-19.3.6.4-1.el7.x86_64.rpm

    erlang otp 19.1 官网文档 HTML格式

    - **Inets**:提供了HTTP服务器和客户端,以及其他网络服务。 - **Crypto**:加密和哈希函数库。 - **Dialyzer**:静态代码分析工具,用于找出潜在的错误和类型不匹配。 - **公共API工具**:如XML和JSON解析器,日期...

    erlang_twitter:一个Erlang Twitter客户端

    1> inets:start(). ... 2> Auth = {"ngerakines", "secretpassword!"}. 3> twitter_client:status_mentions(Auth, []). twitter_client:status_mentions({"ngerakines", "secretpassword"}, []). [{status,"Mon Nov...

    mechanizerl:模仿WWW的Erlang Web测试工具

    erl - pa ebin - boot start_sasl - s inets - s xmerl - s mechanizerl 1 > Mech = mechanizerl : new (). { mechanizerl , < 0> } 2 > Mech : get ( " http://google.com/ " ). ok 3 > Mech : submit_form ( " ...

    otp_src_17.0.tar.gz

    - **Inets**:包含了HTTP和FTP服务器/客户端实现,以及其他网络协议。 - **Webmachine**:轻量级HTTP服务器框架,用于构建RESTful Web服务。 4. ** otp_src_17.0**: 这个版本发布于2013年,包括Erlang VM (BEAM...

    otp_src_23.0.tar.gz

    8. **Inets**:互联网客户端和服务端应用程序,如HTTP客户端和服务器。 9. **SNMP**:简单网络管理协议的实现,用于系统管理和监控。 10. **Diameter**:一种应用层协议,用于计费和认证,常用于移动网络。 在...

    opentracing-erlang:ERlang的开放跟踪工具包

    依存关系共享给otter和公共库函数是常见的测试依赖项(即不属于生产版本) 为了避免外部依赖性,默认情况下,OTTER使用OTP inets HTTP客户端(httpc)将跨度发送到跟踪收集器。 但是,htc在高吞吐量方案中的声誉相当...

    Erlang实现的百度云推送Android服务端实例

    在这个示例中,`inets:start()`启动了Erlang的HTTP客户端库,允许我们发送HTTP请求。`ApiKey`、`Channel_Id`、`Device_Type` 和 `Message_Type` 是构建请求所需的基本参数。`TitleStr` 和 `DescriptionStr` 定义了...

    otp_src_22.0_h.tar.gz

    OTP包含大量的标准库,如加密算法(crypto)、HTTP服务器(inets)、Mnesia分布式数据库、公共对话协议(public_key)、SSL支持、系统监控和管理(syslog、snmp)等。这些库为开发高效、可靠的系统提供了便利。 4....

    erlang-oauth:Erlang OAuth 1.0实现

    erlang-oauth ...有关更多信息,请查阅钢筋文档。 快速入门(客户端使用情况) $ make ... $ erl -pa ebin -s crypto -s inets ... 1> Consumer = {"key", "secret", hmac_sha1}. ... 2> RequestTokenURL =

    simple_bridge:一个简单,标准化的Erlang HTTP服务器接口库

    简单桥 通过创建标准化接口,SimpleBridge减轻了对多个Erlang HTTP服务器进行编码的麻烦。 它目前支持Cowboy,Inet,... 这意味着您可以在Inets,Mochiweb和Webmachine上运行websocket ,而本机都不支持Websockets。

    otp_win_64_24.0.exe

    5. 应用框架:如Mnesia数据库系统、公共接口服务器(COS)和Web服务器(Yaws或Inets)等,方便开发特定用途的应用。 使用OTP Win64 24.0,开发者可以构建高性能、高并发的系统,同时享受Erlang语言提供的强大并发...

    java获取ip地址与网络接口的方法示例

    在 Java 中,获取主机对象可以使用 `InetAddress` 类,通过 `getLocalHost()` 方法可以获取本地主机对象,例如: ```java InetAddress host = InetAddress.getLocalHost(); ``` 也可以通过 `getByName()` 方法根据 ...

Global site tag (gtag.js) - Google Analytics