Инетс http клиент + авторизация - PullRequest
2 голосов
/ 16 ноября 2011

Как указать имя пользователя / пароль для авторизации клиента в запросе http, сделанном функцией httpc: request () ??

Ответы [ 4 ]

9 голосов
/ 17 ноября 2011

Я не думаю, что httpc модуль предоставляет средства для этого. Тем не менее, это не сложно реализовать (если мы говорим о базовой аутентификации). В конце концов, это просто дополнительный заголовок запроса с парой 'user: password' в кодировке 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). 
2 голосов
/ 16 ноября 2011

Я вижу в документе, что 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

1 голос
/ 19 ноября 2011

Для дайджеста вам нужно будет сделать то же самое, что и основной, но более того. Обычно вы переходите на страницу без авторизации, получаете информацию заголовка «WWW-Authenticate», а затем используете царство и одноразовый номер для создания заголовка «Авторизация». http://en.wikipedia.org/wiki/Digest_access_authentication имеет достойный пример внизу.

Как правило, HTTPS + Basic достаточно, если не лучше, для большинства случаев использования.

0 голосов
/ 25 июня 2013

Попробуйте использовать ibrowse, который поддерживает, и я использую это! https://github.com/cmullaparthi/ibrowse

...