我mix fetch.btc在 phoenix 应用程序上有混合任务(lib/mix/tasks/fetch.btc.ex):
defmodule Mix.Tasks.Fetch.Btc do
use Mix.Task
def run(_args) do
res = HTTPoison.get!("https://blockchain.info/ticker")
IO.inspect(res)
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行时mix fetch.btc出现错误:
** (ArgumentError) argument error
(stdlib) :ets.lookup_element(:hackney_config, :mod_metrics, 2)
PROJ_DIR/deps/hackney/src/hackney_metrics.erl:27: :hackney_metrics.get_engine/0
PROJ_DIR/deps/hackney/src/hackney_connect.erl:78: :hackney_connect.create_connection/5
PROJ_DIR/deps/hackney/src/hackney_connect.erl:47: :hackney_connect.connect/5
PROJ_DIR/deps/hackney/src/hackney.erl:330: :hackney.request/5
lib/httpoison/base.ex:787: HTTPoison.Base.request/6
lib/httpoison.ex:128: HTTPoison.request!/5
lib/mix/tasks/fetch.btc.ex:14: Mix.Tasks.Fetch.Btc.run/1
(mix) lib/mix/task.ex:331: Mix.Task.run_task/3
(mix) lib/mix/cli.ex:79: Mix.CLI.run_task/2
(elixir) lib/code.ex:767: Code.require_file/2
Run Code Online (Sandbox Code Playgroud)
但在我的控制器中,这段代码res = HTTPoison.get!("https://blockchain.info/ticker")工作成功!
信息:
hackney: 1.15.1
httpoison: 1.5.0
phoenix: 1.4.3
Run Code Online (Sandbox Code Playgroud)
尝试使用 HTTPoison 将图像发布到 Spree 的ProductImage API时,失败并出现 Rails 错误NoMethodError (undefined method 'permit' for #<ActionDispatch::Http::UploadedFile:0x007f94fa150040>)。我用来生成此请求的 Elixir 代码是:
def create() do
data = [
{:file, "42757187_001_b4.jpeg",
{"form-data", [{"name", "image[attachment]"}, {"filename", "42757187_001_b4.jpeg"}]},
[{"Content-Type", "image/jpeg"}]
}, {"type", "image/jpeg"}
]
HTTPoison.post!("http://localhost:3000/api/v1/products/1/images", {:multipart, data}, ["X-Spree-Token": "5d096ecb51c2a8357ed078ef2f6f7836b0148dbcc536dbfc", "Accept": "*/*"])
end
Run Code Online (Sandbox Code Playgroud)
我可以通过以下调用使用 Curl 使其工作:
curl -i -X POST \
-H "X-Spree-Token: 5d096ecb51c2a8357ed078ef2f6f7836b0148dbcc536dbfc" \
-H "Content-Type: multipart/form-data" \
-F "image[attachment]=@42757187_001_b4.jpeg" \
-F "type=image/jpeg" \
http://localhost:3000/api/v1/products/1/images
Run Code Online (Sandbox Code Playgroud)
为了进行比较,下面是失败的 HTTPoison 请求和成功的 Curl 请求的 RequestBin 捕获: https://requestb.in/12et7bp1?inspect
为了让 HTTPoison 与这个 …
我正在尝试使用 tesla 发出帖子请求,但出现错误:
(CaseClauseError) no case clause matching: %{name: "ecdebit"}
(hackney) /deps/hackney/src/hackney_request.erl:312::hackney_request.handle_body/4
(hackney) /deps/hackney/src/hackney_request.erl:81::hackney_request.perform/2
(hackney) /deps/hackney/src/hackney.erl:372::hackney.send_request/2
(tesla) lib/tesla/adapter/hackney.ex:69: Tesla.Adapter.Hackney.request/5
(tesla) lib/tesla/adapter/hackney.ex:31: Tesla.Adapter.Hackney.call/2
Run Code Online (Sandbox Code Playgroud)
我的请求代码是
request_body = %{
name: "ecdebit",
}
Tesla.post(client, "/contactdb/lists", request_body)
Run Code Online (Sandbox Code Playgroud)
在特斯拉基本网址是:https://api.sendgrid.com/v3并设置授权key。我们如何为 post 请求传递数据?
在特斯拉文档中,将发布请求定义为:
Tesla.post("http://httpbin.org/post", "data", headers: [{"content-type", "application/json"}])
Run Code Online (Sandbox Code Playgroud)
这个星球上有没有人可以帮助摆脱这个小故障:(。
在我的Phoenix应用程序中,我试图使用HTTPoison HTTP客户端(https://hexdocs.pm/httpoison/api-reference.html)向AgileCRM API发出发布请求。我能够使用cURL发出成功的请求,但是我尝试在Phoenix中复制它的尝试失败,出现401 UNAUTHORIZED错误。
我成功的cURL:
$ curl https://domain.agilecrm.com/dev/api/contacts/search/email \
-H "Accept: application/json" \
-d 'email_ids=["contact@test.com"]' \
-u admin@test.com:api_key
Run Code Online (Sandbox Code Playgroud)
返回状态200和请求的数据。
我失败的HTTPoison:
url = "https://domain.agilecrm.com/dev/api/contacts/search/email"
body = Poison.encode!(%{"body": "email_ids=['contact@test.com']"})
headers = [{"Accept", "application/json"}, {"Authorization", "admin@test.com:api_key"}]
response = HTTPoison.post!(url, body, headers)
IO.inspect response
Run Code Online (Sandbox Code Playgroud)
哪个返回
%HTTPoison.Response{body: "<html><head>\n<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n<title>401 UNAUTHORIZED</title>\n</head>\n<body text=#000000 bgcolor=#ffffff>\n<h1>Error: UNAUTHORIZED</h1>\n</body></html>\n",
headers: [{"X-TraceUrl", "/appstats/details?time=1509129565372&type=json"},
{"WWW-Authenticate", "Basic realm=\"agilecrm\""},
{"Content-Type", "text/html; charset=utf-8"},
{"X-Cloud-Trace-Context", "8de994n2tbu2o356891bc3e6"},
{"Date", "Fri, 27 Oct 2017 18:39:25 GMT"}, {"Server", "Google Frontend"},
{"Content-Length", "200"}],
request_url: "https://domain.agilecrm.com/dev/api/contacts/search/email", status_code: …Run Code Online (Sandbox Code Playgroud) 我需要通过传递查询字符串来进入 api,以防路由是:
api/v1/servers/#{server_name}/zones
Run Code Online (Sandbox Code Playgroud)
查询参数rrsets=false和代码:
HTTPoison.get!("api/v1/servers/#{server_name}/zones")
Run Code Online (Sandbox Code Playgroud)
如何使用查询字符串发送?
有一个公共 API 可以在浏览器中完美运行并返回 JSON 响应,但使用最新版本的 Httpoision 它无法按预期工作:
HTTP(GET):https://yts.lt/api/v2/list_movies.json ?query_term=tt11296058
{:ok,
%HTTPoison.Response{
body: "",
headers: [
{"Date", "Tue, 22 Jun 2021 11:42:20 GMT"},
{"Transfer-Encoding", "chunked"},
{"Connection", "keep-alive"},
{"Cache-Control", "max-age=3600"},
{"Expires", "Tue, 22 Jun 2021 12:42:20 GMT"},
{"Location",
"https://yts.mx/api/v2/list_movies.json?query_term=tt11296058"},
{"cf-request-id", "0ad5205cb800004da508b04000000001"},
{"Expect-CT",
"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\""},
{"Report-To",
"{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v2?s=O80%2B5KfZ6d3G3Fz0NBGlep%2BetzQAvaUDIvVW09DUB2QMtJpd1XxupK621LhGR8EqiOsOY%2B55BdaHAljyLCEumHyb0rHSqk526jMQ5NxuLUi%2FVdbX\"}],\"group\":\"cf-nel\",\"max_age\":604800}"},
{"NEL", "{\"report_to\":\"cf-nel\",\"max_age\":604800}"},
{"Server", "cloudflare"},
{"CF-RAY", "663536745c654da5-BOM"},
{"alt-svc",
"h3-27=\":443\"; ma=86400, h3-28=\":443\"; ma=86400, h3-29=\":443\"; ma=86400, h3=\":443\"; ma=86400"}
],
request: %HTTPoison.Request{
body: "",
headers: [],
method: :get,
options: [],
params: %{},
url: "https://yts.lt/api/v2/list_movies.json?query_term=tt11296058"
},
request_url: "https://yts.lt/api/v2/list_movies.json?query_term=tt11296058",
status_code: 301 …Run Code Online (Sandbox Code Playgroud) elixir ×6
httpoison ×6
agile-crm ×1
curl ×1
elixir-mix ×1
httprequest ×1
redirect ×1
spree ×1
tesla ×1