HTTPoison 跟随重定向

时间:2021-06-23 07:36:25

标签: redirect elixir httpoison

有一个公共 API 可以在浏览器中完美运行并返回 JSON 响应,但使用最新版本的 Httpoision 却无法正常工作:

HTTP (GET) : https://yts.lt/api/v2/list_movies.json?query_term=tt11296058

Elixir: 1.12.1
OTP: 24
{:httpoison, "~> 1.8"},
{:floki, "~> 0.20.4"},
{:poison, "~> 3.1"},
{:hackney, github: "benoitc/hackney", override: true},

还要指出 status_code 来自响应是 301。 301 是针对永久移除的资源,但这里似乎不是这种情况。

项目依赖:

REPLACE(json_build_array(adm_id),'"', '') 

2 个答案:

答案 0 :(得分:4)

您需要传递 follow_redirect 选项:

HTTPoison.get(url, [], follow_redirect: true)

示例:

iex(1)> Mix.install [:httpoison]
:ok
iex(2)> url = "https://yts.lt/api/v2/list_movies.json?query_term=tt11296058"
"https://yts.lt/api/v2/list_movies.json?query_term=tt11296058"
iex(3)> HTTPoison.get(url, [], follow_redirect: true)
{:ok,
 %HTTPoison.Response{
   body: "{\"status\":\"ok\",\"status_message\":\"Query was successful\",\"data\":
...

答案 1 :(得分:3)

<块引用>

301 用于永久删除的资源

绝对不是。这是一个 redirection(“永久移动”的代码。)

浏览器显然自己处理重定向,代码必须自己处理。收到 SQL> select a.deptno, a.ename, b.job 2 from emp a cross join emp b 3 where 1 = 1 4 and (a.ename = b.ename or 5 a.job = b.job or 6 a.deptno = b.deptno or 7 a.sal = b.sal or 8 a.mgr = b.mgr 9 ) 10 and (f_equal(a.ename , b.ename) + 11 f_equal(a.job , b.job) + 12 f_equal(a.deptno, b.deptno) + 13 f_equal(a.sal , b.sal) + 14 f_equal(a.mgr , b.mgr) 15 ) >= 3; DEPTNO ENAME JOB ---------- ---------- --------- 20 SMITH CLERK 30 ALLEN SALESMAN 30 ALLEN SALESMAN 30 ALLEN SALESMAN <snip> 后,您的代码应按指定的位置重复请求。在您提供的响应中,响应中没有指定位置,这很奇怪,但这是另一个问题。


不过,

301 可以是 instructed to handle redirects