curl 在终端中运行良好,使用 httr 时出现 419 错误

curl runs fine in the terminal, getting 419 error with httr

我有一个 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'
       )

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

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

Status: 419
Content-Type: application/json

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

关于我可能指定的错误有什么想法吗?


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

  1. 首先,R 的记录缺少 cookies = c() 中定义的一个 cookie 参数。
  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 的代理吗?

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