(编辑:我使用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)设置正确。
答案 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似乎并没有很好地捕获异常,因为它不是“!”函数的版本...如果不使用字符列表或类似字符将导致各种难以理解的异常...