当包含auth头时,httpc get请求失败,带404

时间:2015-07-09 13:45:25

标签: erlang elixir

我正在使用Erlang的httpc来生成带参数的get请求和一个基本的auth头。在没有httpc / 1中的标题的情况下使用时,如下所示:

 url = String.to_char_list("https://endpoint.com/endpoint?param=foo")
 :httpc.request(url)

我得到预期的403未经授权。但是,当我像这样使用httpc / 4时:

 url = String.to_char_list("https://endpoint.com/endpoint?param=foo")
 headers = headers ++ [authheader]
 httpc.request(:get, {url, headers}, [], [])

我收到404未找到错误。我可以IO.puts url并在从浏览器手动添加auth标头时成功直接访问资源。我的帖子路由所有工作都很好用httpc / 4。这里发生了什么?

1 个答案:

答案 0 :(得分:0)

这很可能是网址中的拼写错误。这就是在httpc中使用基本身份验证的方式对我而言。

:httpc.request(:get, {'http://localhost:8080/', [{'Authorization', 'Basic ' ++ :base64.encode_to_string('test:test')}]}, [], [])
{:ok, {{'HTTP/1.0', 200, 'OK'}, ...}

在检查网址之前已经执行了身份验证,因此您可以尝试连接到不存在的网址并接收401:

:httpc.request(:get, {'http://localhost:8080/asdf', []}, [], [])
{:ok, {{'HTTP/1.0', 401, 'Unauthorized'}, ...}

如果添加正确的标题:

:httpc.request(:get, {'http://localhost:8080/asdf', [{'Authorization', 'Basic ' ++ :base64.encode_to_string('test:test')}]}, [], [])
{:ok, {{'HTTP/1.0', 404, 'File not found'}, ...}

此外,这对ssl来说不是问题,因为它会产生完全不同的错误。

服务器的http和https路由也很小。这样就可以在不使用https://的情况下将网址粘贴到浏览器。

在你的问题中,你说“403未经授权”,而未经授权是401. 403被禁止,但禁止在这种情况下没有多大意义,所以我认为,你的意思是401。

问题中httpc.request(...)之前没有冒号,这更容易造成简单的拼写错误。

除了提示:您可以使用'text'(单引号)代替String.to_character_list("text")