Inets http客户端+授权

时间:2011-11-16 08:15:29

标签: http erlang authorization inets

如何在httpc:request()函数的http请求中为客户端授权指定用户/密码?

4 个答案:

答案 0 :(得分:9)

我认为httpc模块不为此提供便利。 然而,实施并不困难(如果我们谈论基本认证)。毕竟它只是一个额外的请求标题,其中'user:password'对Base64编码。 例如Tsung's ts_http_common module就可以了。

例如,以下是如何使用基本身份验证运行HTTP PUT请求:

auth_header(User, Pass) ->
    Encoded = base64:encode_to_string(lists:append([User,":",Pass])),
    {"Authorization","Basic " ++ Encoded}.

put_request(Url, User, Pass, Body) ->
    ContentType = "text/json",
    Headers = [auth_header(User, Pass), {"Content-Type",ContentType}],
    Options = [{body_format,binary}],
    httpc:request(put, {Url, Headers, ContentType, Body}, [], Options). 

答案 1 :(得分:2)

我在doc中看到HTTPOptions持有pass和user:

HTTPOptions = http_options()
http_options() = [http_option()]
http_option() = {timeout, timeout()} | {connect_timeout, timeout()} | {ssl, ssloptions()} | {ossl, ssloptions()} | {essl, ssloptions()} | {autoredirect, boolean()} | {proxy_auth, {userstring(), passwordstring()}} | {version, http_version()} | {relaxed, boolean()} | {url_encode, boolean()}

文档:http://www.erlang.org/doc/man/httpc.html#request-5

答案 2 :(得分:1)

对于摘要,你需要做与基本相同的事情,但更重要的是。通常,您将在没有auth的情况下点击页面,获取“WWW-Authenticate”标题信息,然后使用领域和现时生成“授权”标题。 http://en.wikipedia.org/wiki/Digest_access_authentication在底部有一个不错的例子。

通常,对于大多数用例,HTTPS + Basic即使不是更好,也足够了。

答案 3 :(得分:0)

尝试使用ibrowse,支持并且我一直在使用它! https://github.com/cmullaparthi/ibrowse