如何在代理后面使用httpotion?

时间:2015-05-16 05:43:58

标签: proxy elixir

(编辑:我使用HTTPoison的get!函数清除了此问题。

HTTPoison.start
HTTPoison.get!("httpbin.org/get", [], [{:proxy, {"proxy.mydomain.com", 8080}}])

我是使用长生不老药的新手。我尝试了httpotion上的示例应用作为第一步。

  

IEX> response = HTTPotion.get" httpbin.org/get"

但是,它无法访问代理服务器后面的网站。

iex(1)> res = HTTPotion.get "httpbin.org/get"
** (HTTPotion.HTTPError) nxdomain
    (httpotion) lib/httpotion.ex:195: HTTPotion.handle_response/1

没有代理,它就能成功地运作;

iex(1)> res = HTTPotion.get "httpbin.org/get"
%HTTPotion.Response{body: "{\n  \"args\": {}, \n  \"headers\": {\n        \"Content-Length\": \"0\", \n    \"Host\": \"httpbin.org\"\n  }, \n  \"origin\": \"191.238.84.51\", \n  \"url\": \"http://httpbin.org/get\"\n}\n",
 headers: ["Access-Control-Allow-Credentials": "true",...

我尝试通过阅读httpotion所依赖的ibrowse来设置代理参数,例如;

req = HTTPotion.get("httpbin.org/get", [{:proxy_host, "proxy.mydomain.com"}, {:proxy_port, 8080}])

但结果是一样的。

如何设置httpotion的代理参数?或者elixir上是否有可以处理代理的HTTP访问的替换库?

我的环境是Ubuntu 14.04.2,环境变量(http_proxy,https_proxy,HTTP_PROXY和HTTPS_PROXY)设置正确。

2 个答案:

答案 0 :(得分:9)

看看httpoison tests:D

以下是如何使用代理执行get请求:

HTTPoison.get!("http://www.google.com", [], [{:proxy, "proxy.company.address:port"}])

答案 1 :(得分:2)

我刚刚通过阅读来源自己想出了这一点,但我现在注意到它已在最新的自述文件中记录...

简短版本(因为这个答案在Google搜索中早于README出现)是你需要将params直接传递给ibrowse,你使用:ibrowse选项执行此操作,然后还注意ibrowse通常会使用字符列表

所以,例如:

HTTPotion.get "httpbin.org/get", [ ibrowse: [ proxy_host: 'some.host', proxy_port: 8080 ] ]

注意,httpotion似乎并没有很好地捕获异常,因为它不是“!”函数的版本...如果不使用字符列表或类似字符将导致各种难以理解的异常...