当我尝试:
HTTPoison.get! "https://facebook.com"
Run Code Online (Sandbox Code Playgroud)
我明白了:
** (HTTPoison.Error) {:tls_alert, 'unknown ca'}
[error] SSL: :certify: ssl_handshake.erl:1606:Fatal error: unknown ca
(httpoison) lib/httpoison.ex:66: HTTPoison.request!/5
Run Code Online (Sandbox Code Playgroud)
这是预期的,因为在我的公司,我需要相信防火墙的证书出来.
我信任系统范围内的证书(.cer文件),这就是为什么wget在访问httpsURL 时不会给我ssl错误.但似乎hackney/HTTPoison忽略了这种配置.
如何让HTTPoison/hackney将证书识别为可信证书?
我正在使用 HTTPoison 和 Hackney 池:
:hackney_pool.child_spec(:start, [checkout_timeout: ..., max_connections: 100]),
:hackney_pool.child_spec(:trigger, [checkout_timeout: ..., max_connections: 100]),
:hackney_pool.child_spec(:result, [checkout_timeout: ..., max_connections: 100])
...
HTTPoison.get('...', [...], [
...,
hackney: [pool: :start]
])
Run Code Online (Sandbox Code Playgroud)
有什么方法可以匹配运行/排队连接的数量并实时监控它们?谢谢
升级到 Elixir 1.10.3 后,调用HTTPoison.request!()了HTTPoison.Errorwithid: nil和{:options, {:sslv3, {:versions, [:"tlsv1.2", :"tlsv1.1", :tlsv1, :sslv3]}}}. 什么可能导致这种情况?我在网上看到的所有例子都假设原因是一个原子。
我想制作一个程序,该程序将显示来自互联网广播流(SomaFM)的当前正在播放的歌曲。我在 Elixir 中使用 HTTPoison 库。但我没有得到回应。它只是挂起。
我正在使用以下代码:
HTTPoison.start
url = "http://ice1.somafm.com/lush-128-mp3"
headers = [{"Icy-Metadata", "1"}]
with {:ok, %HTTPoison.Response{body: body}} <- HTTPoison.get(url, headers) do
body |> Poison.decode! |> IO.inspect
else
{:error, %HTTPoison.Error{reason: reason}} ->
IO.inspect reason
end
end
Run Code Online (Sandbox Code Playgroud)
我实际上对 elixir 很陌生,所以如果有人能帮助我,我将非常感激。
有什么方法可以模式匹配的错误响应httpoison?我在做这个
case HTTPoison.get!(url, [], []) do
%HTTPoison.Error{reason: reason} ->
IO.inspect "Media: #{reason}!"
:timer.sleep(:timer.seconds(3))
do_loop(starting, ending, interval, camera_exid)
response ->
upload(response.status_code, response.body, starting, camera_exid)
do_loop(starting + interval, ending, interval, camera_exid)
end
Run Code Online (Sandbox Code Playgroud)
但是它没有抓住timeout并给我错误
** (HTTPoison.Error) :timeout
(httpoison) lib/httpoison.ex:66: HTTPoison.request!/5
(extractor) lib/snapshot/snap_extractor.ex:67: Extractor.SnapExtractor.do_loop/4
(elixir) lib/enum.ex:651: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:651: Enum.each/2
Run Code Online (Sandbox Code Playgroud)
我认为这样做是错误的。.有什么建议吗?
我正在使用elixir对我的机器上的主机进行一些XMLRPC查询,该主机只接受来自127.0.xy的调用,其中x和y可以配置,但ip不能是127.0.0.1.
curl除非我添加标志,否则对此主机的简单请求将失败--interface 127.0.x.y.
如何使用不同于127.0.0.1的给定接口ip启动我的elixir应用程序?
我用来发送请求的库是HTTPoison,如果这有用的话.
如果我尝试:
url = "https://www.economist.com/news/finance-and-economics/21727073-economists-struggle-work-out-how-much-free-economy-comes-cost"
{:ok, %HTTPoison.Response{status_code: 200, body: body}} = HTTPoison.get(url)
IO.binwrite body
Run Code Online (Sandbox Code Playgroud)
我在控制台中看到乱码文本(而不是html).但如果我在网页上查看源代码,我会在那里看到HTML.我究竟做错了什么?
PS:它与js http客户端(axios.js)工作正常,不知道为什么它不适用于httpoison
我正在尝试使用HTTPoison.
我想传递带有标题的 json 数据,其中包含"Authorization": Bearer #{token}.
为了实现这一点,我已经尝试过,
headers = [{"Authorization": "Bearer #{token}"}, {"Content-Type", "application/json"}]
body =
%{
id: id,
name: name,
...
}
HTTPoison.post(url, body, headers)
Run Code Online (Sandbox Code Playgroud)
但它会触发一个语法错误,即syntax error before: "Authorization". 我一直在寻找正确的标题语法,但仍然没有运气..
什么是正确的语法headers?
提前致谢..
我正在尝试像这样初始化模块属性
response = HTTPoison.get! url
{:ok, response} = Poison.decode(response.body)
@attr response
Run Code Online (Sandbox Code Playgroud)
我以前用一个文件来做,就像这样:
@external_resource file = Path.join([__DIR__, "file.txt"])
Module.register_attribute __MODULE__, :attr, accumulate: true
for line <- File.stream!(file, [], :line) do
@attr line
...
Run Code Online (Sandbox Code Playgroud)
使用HTTPoison并获取API的响应是否一样?我收到此错误:
== Compilation error in file lib/module.ex ==
** (ArgumentError) argument error
(stdlib) :ets.lookup_element(:hackney_config, :mod_metrics, 2)
/project/deps/hackney/src/hackney_metrics.erl:27: :hackney_metrics.get_engine/0
/project/deps/hackney/src/hackney_connect.erl:69: :hackney_connect.create_connection/5
/project/deps/hackney/src/hackney_connect.erl:37: :hackney_connect.connect/5
/project/deps/hackney/src/hackney.erl:316: :hackney.request/5
lib/httpoison/base.ex:630: HTTPoison.Base.request/9
lib/httpoison.ex:66: HTTPoison.request!/5
lib/module.ex:4: (module)
Run Code Online (Sandbox Code Playgroud) 我是 Elixir 的新手。我希望它与 Python 或 R 类似,可以在其中下载模块并保持最新状态而无需太多努力。
我已经创建了一个混合项目来使用 HTTPoison,但我真的只是想从解释器中尝试 HTTPoison。
$ iex
Erlang/OTP 22 [erts-10.4.3] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]
Interactive Elixir (1.9.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> import HTTPoison
** (CompileError) iex:1: module HTTPoison is not loaded and could not be found
iex(1)>
Run Code Online (Sandbox Code Playgroud)