r - 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'
)
raw
curl 是什么意思--data-raw
?这是否意味着我会设置encode='raw'
?我已经尝试了encode
我能想到的每一次迭代。
当我尝试在 RI 中运行时,得到:
Status: 419
Content-Type: application/json
如果我转身在终端中运行原始 curl,一切正常。
关于我可能错误指定的任何想法?
我使用了 httpreq.com 并尝试了来自终端的工作 curl 和来自 R 的改编 httr 代码(用 httpreq.com 记录端点替换 url)。我注意到两个不同之处:
- 首先,R 的记录缺少一个在 中定义的 cookie 参数
cookies = c()
。 - 其次,“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 的代理吗?
解决方案
我最终调用system()
了在终端中工作的原始 curl。这让我在 R 中工作我更舒服,但我无法让 httr 解决方案工作。
推荐阅读
- nlp - 为什么在 first attention 论文中没有使用词嵌入(Glove、word2vecetc)?
- android - 无法同时使用 Google Analytics 和 Firebase 依赖项
- javascript - onClick 函数在嵌套的 antd 卡片组件中不起作用
- javascript - Node.js:异步函数似乎不等待 for 循环中 Promise 的解析
- mysql - 如何获得每个客户的最后一个订单?
- asp.net - 在 IIS 上托管后从 Angular 调用时出现 WebAPI 错误(仅限 Post 方法)
- java - 导航回同一页面后无法再次单击随机链接 - 硒自动化
- authorization - 如何获得 XACML 政策许可?
- apache-spark - 拆分 .ttl 或 .nt 文件 - Spark Scala
- c# - 如何手动设置 HttpContext.User.Identity.IsAuthenticated 的值