首页 > 解决方案 > curl 在终端中运行良好,httr 出现 419 错误

问题描述

我有一个在终端中运行良好的 curl,会产生响应。它以:

--data-raw 'field1=123456&_token=mytoken'
--compressed

我的data清单如下:

data = list(
  `field1` = '123456',
  `_token` = 'mytoken'
)

然后我对 POST 进行以下调用:

httr::POST(url = 'url', 
       httr::add_headers(.headers=headers), 
       httr::set_cookies(.cookies=cookies), 
       body = data
       #,encode = 'raw'
       )

rawcurl 是什么意思--data-raw?这是否意味着我会设置encode='raw'?我已经尝试了encode我能想到的每一次迭代。

当我尝试在 RI 中运行时,得到:

Status: 419
Content-Type: application/json

如果我转身在终端中运行原始 curl,一切正常。

关于我可能错误指定的任何想法?


我使用了 httpreq.com 并尝试了来自终端的工作 curl 和来自 R 的改编 httr 代码(用 httpreq.com 记录端点替换 url)。我注意到两个不同之处:

  1. 首先,R 的记录缺少一个在 中定义的 cookie 参数cookies = c()
  2. 其次,“User-Agent”不同。对于终端,它记录为"libcurl\/7.64.1 r-curl\/4.3 httr\/1.4.2". 对于 R 脚本,它记录为"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/..... 这是我在headers = c(User-Agent中指定的,="...")因为这是我在原始 curl 中找到的。我需要更改 R 的代理吗?

标签: rhttr

解决方案


我最终调用system()了在终端中工作的原始 curl。这让我在 R 中工作我更舒服,但我无法让 httr 解决方案工作。


推荐阅读