我正在尝试将一些代码从shell脚本移动到erlang以获取新的内部工具。
当前的shell脚本调用curl,如下所示:
curl \
--header "Content-type: text/xml; charset=utf-8" \
--data @$OTAR_SOAP_FILE \
--output $OTAR_OUT_FILE \
--stderr $OTAR_ERR_FILE \
--insecure \
$OTAR_URL
我希望能够使用inets的库从erlang中做同样的事情。
这是我到目前为止所做的,但它不起作用:
stress(Url, Message, ConcurrentAttempts, Attempts) ->
setup_connection(),
{ok, {{Version, ResponseCode, ReasonPhrase}, Headers, Body}} =
httpc:request(get, {Url, [], "text/xml", Message}).
在这种情况下,URL与$ OTAR_URL相同,Message是$ OTAR_SOAP_FILE的内容。
我如何通过curl传递OTAR中的SOAP文件中的数据,与我通过curl传递的数据相同?
答案 0 :(得分:6)
您正在使用httpc:request/2,它需要两个参数:网址和个人资料。您将“获取”作为URL传递,将元组作为配置文件传递,这显然是错误的:
httpc:request(get, {Url, [], "text/xml", Message}).
您可能希望查看httpc:request函数的其他变体,例如httpc:request/4。
作为备注,请始终添加您获得的特定错误。它通常包含错误的原因,并使其他用户更容易发现实际问题。
答案 1 :(得分:2)
Remember that curl is an advanced HTTP Client. Most of the Erlang HTTP Clients今年的某个时候,我正在研究一个NTLM认证代理背后的脚本,所有Erlang HTTP客户端都站在了这个位置。因此,这就是所需要的
lack most features that curl has e.g. NTLM Authentication, seemless Proxy
authentication,seemeless Cookie support, e.t.c.
curl \要在erlang中使用curl来发出这样一个简单的GET请求,我就是这样做的:
--proxy {PROXY}:{PORT} --proxy-ntlm --proxy-user \
'{Domain}\{Username}:{Password}' {Link}
curl(Link)-> Cmd = "curl -X GET \"" ++ Link ++ "\"", Output = os:cmd(Cmd), Output.您需要做的就是将所有字符串变量转义为卷曲,尤其是{Link}
curl(Link,OutputFile)-> Cmd = "curl -X GET -o \"" ++ OutputFile ++ "\" \"" ++ Link ++ "\"", os:cmd(Cmd).
在这种情况下,我们不会在erlang中获得任何输出,因为我们告诉curl将所有输出都抛出到文件中。
因此可以执行任何脚本,任何termninal程序,任何使用Erlang命令
Microsoft Windows [Version 6.1.7600] Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\System32>erl Eshell V5.9 (abort with ^G) 1> os:cmd("echo \"Erlang is great!!!!\" "). "\"Erlang is great!!!!\" \r\n" 2> [io:format("~s~n",[X]) || X <- string:tokens(os:cmd("ping google.com"),"\r\n")],ok. Pinging google.com [173.194.78.113] with 32 bytes of data: Reply from 173.194.78.113: bytes=32 time=273ms TTL=45 Reply from 173.194.78.113: bytes=32 time=272ms TTL=45 Reply from 173.194.78.113: bytes=32 time=274ms TTL=45 Reply from 173.194.78.113: bytes=32 time=275ms TTL=45 Ping statistics for 173.194.78.113: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 272ms, Maximum = 275ms, Average = 273ms ok 3>