2

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

4

4 回答 4

10

我不认为httpc模块为此提供了便利。尽管如此,实现起来并不难(如果我们谈论的是基本认证)。毕竟它只是一个附加的请求标头,带有“用户:密码”对 Base64 编码。例如,Tsung 的 ts_http_common 模块就是这样做的。

例如,以下是使用基本身份验证运行 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). 
于 2011-11-17T08:48:03.540 回答
2

我在文档中看到 HTTPOptions 持有通行证和用户:

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

于 2011-11-16T17:24:27.740 回答
1

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

一般来说,对于大多数用例来说,HTTPS + Basic 就足够了,如果不是更好的话。

于 2011-11-19T14:24:07.723 回答
0

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

于 2013-06-25T08:56:21.087 回答