如何使用erlang中的httpc:request来http:post文件?

英语

我曾经这样编码:

inets:start(),
ssl:start(),
ParaUrl = io_lib:format("http://xxx/passport?accessn=~s",[Access]),
ParaStr = io_lib:format("id=~p",[Id]),
RegUsr = httpc:request(post,{ParaUrl, [],"application/x-www-form-urlencoded", list_to_binary(ParaStr)},[],[])

但这只是字符串而不是二进制文件,有人可以告诉我如何使用httpc:request发布二进制文件吗?

英语

ActiveState配方146306的启发(以及使用PYCURL进行PYTHON HTTP POST二进制文件上传(PYTHON RECIPE)),并通过在Erlang中格式化Multipart Formdata进行了更改谢谢!

format_multipart_formdata(Boundary, Fields, Files) ->
    FieldParts = lists:map(fun({FieldName, FieldContent}) ->
        [lists:concat(["--", Boundary]),
            lists:concat(["Content-Disposition: form-data; name=\"",atom_to_list(FieldName),"\""]),
            "", FieldContent]
                           end, Fields),

    FieldParts2 = lists:append(FieldParts),


    FileParts = lists:map(fun({FieldName, FileName, FileContent}) ->

        [lists:concat(["--", Boundary]),
            lists:concat(["Content-Disposition: form-data; name=\"",atom_to_list(FieldName),"\"; filename=\"",FileName,"\""]),
            lists:concat(["Content-Type: ", "application/octet-stream"]), "", FileContent]
                          end, Files),
    FileParts2 = lists:append(FileParts),
    EndingParts = [lists:concat(["--", Boundary, "--"]), ""],
    Parts = lists:append([FieldParts2, FileParts2, EndingParts]),
    string:join(Parts, "\r\n").

用法:

{ok,BinStream} = file:read_file("./images/avatar.png"),
Data = binary_to_list(BinStream), 
Boundary = "------WebKitFormBoundaryUscTgwn7KiuepIr1",
ReqBody = format_multipart_formdata(Boundary, [{uid,"123"}], [{avatar, "avatar", Data}]),
ContentType = lists:concat(["multipart/form-data; boundary=", Boundary]),
ReqHeader = [{"Content-Length", integer_to_list(length(ReqBody))}],

inets:start(),
ParaUrl = string:join(["http://www.example.com/avatar?access_token=",binary_to_list(token)],""),
RegUsr = httpc:request(post,{ParaUrl, ReqHeader,ContentType, ReqBody},[],[])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在erlang的http客户端(httpc)中禁用SSL对等验证

WebServer 中如何设计文件上传表单以及 Curl 如何使用它们来 POST 文件?

如何从http.Request的响应中读取文件内容

如何使用 Avro 文件发送 http post 请求?

如何使用http POST请求作为formData发送文件?

如何使用http post Node.js下载文件

如何使用从CSV文件中读取的é来修复字符编码

如何使用python中的request.post()方法处理异常

如何使用erlang做一个简单的http post /带标题(如果可能的话,没有库)?

如何禁用oData API的HTTP POST REQUEST?

如何使用go的net / http或类似方法保存在多部分/表单数据POST请求中收到的文件?

如何在Perl中使用HTTP POST接收wav音频文件并在Asterisk AGI中播放

如何使用HttpURLConnection使此HTTP / 1.1 POST在Java中工作?

如何使用 InvokeHttp 来 Rest Api(POST)

如何将HTTP GET和HTTP Post记录到单独的文件中

如何使用SpringMVC @Valid来验证POST中的字段,而不能验证PUT中的空字段

使用Spring Security,如何使用HTTP方法(例如GET,PUT,POST)来区分特定URL模式的安全性?

spring-mvc如何找到合适的类来实例化并使用POST-REQUEST字段填充其数据

使用http.Request和Restangular在Go中查看JSON POST

在 Erlang 中读取文件

Perl — HTTP :: Request :: Common — POST文件和数组

使用c ++通过http POST发送文件

如何在request.post方法中使用json和files参数上传文件

如何使用http方法获取Angular中的文件列表

如何使用http模块在Angular 7中读取文件json?

在Android中,如何在ListView上使用XML Pull Parser来显示XML文件中的数据?

如何在erlang版本中包含“ .mustache”文件?

如何遍历erlang中的目录以仅包含文件夹?

如何将http.Request包装到原型文件中