首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用httr的POST请求在shell请求工作时失败

使用httr的POST请求在shell请求工作时失败
EN

Stack Overflow用户
提问于 2022-02-24 12:11:21
回答 1查看 57关注 0票数 0

我试图通过POST请求从API中获取数据。直接shell命令可以很好地执行请求:

代码语言:javascript
复制
system(sprintf('curl POST -k --tlsv1.2 -v "https://api-gateway.inpi.fr/services/apidiffusion/api/marques/search" -H "X-XSRF-TOKEN: %s" -H \'accept: application/xml\' -H "Content-Type: application/json" -H "Cookie: XSRF-TOKEN=%s; access_token=%s; session_token=%s"  -d \'%s\' > test.xml',token,token,access_token,refresh_token,json_request))

但是,出于许多原因,我想使用httr。我使用以下代码:

代码语言:javascript
复制
test <- httr::POST(
  "https://api-gateway.inpi.fr/services/apidiffusion/api/marques/search",
  httr::set_config(config(ssl_verifypeer = 0L)),
  config = (add_headers(
    "X-XSRF-TOKEN" = token,
    "accept" = "application/xml",
    "Content-Type" = "application/json",
    "Cookie" = sprintf("XSRF-TOKEN=%s; access_token=%s; session_token=%s",token,access_token,refresh_token)
  ))
  ,set_cookies(`X-XSRF-TOKEN` = token,
               `XSRF-TOKEN` = token,
              access_token = access_token,
              session_token = refresh_token)
  ,body = json_request
)

但这将返回一个403禁止的错误(my_token是我使用的标记):

代码语言:javascript
复制
$error
[1] "access_denied"

$error_description
[1] "Invalid CSRF Token '*my_token*' was found on the request parameter '_csrf' or header 'X-XSRF-TOKEN'.

httr似乎没有考虑到我的cookie,因为在我创建的测试对象中令牌是不同的:

代码语言:javascript
复制
> test2$cookies
               domain  flag path secure expiration       name                                value
1 api-gateway.inpi.fr FALSE    /  FALSE       <NA> XSRF-TOKEN *another_token*

知道吗?很抱歉,由于明显的安全原因,我无法创建一个可重复的示例。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-03 09:40:19

解决办法很复杂。

我不得不摆脱httr,我使用了UNIX命令,并且它可以处理相同的请求。

代码语言:javascript
复制
  system(sprintf('curl POST -k --tlsv1.2 "https://api-gateway.inpi.fr/services/apidiffusion/api/marques/search" -H "X-XSRF-TOKEN: %s" -H \'accept: application/json\' -H "Content-Type: application/json" -H "Cookie: XSRF-TOKEN=%s; access_token=%s; session_token=%s"   -d \'%s\' > %s/res.json',tokens$xsrf_token,tokens$xsrf_token,tokens$access_token,tokens$refresh_token,json_request,tempdir()))

httr似乎试图自己处理cookie,所以这可能就是我的问题所在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71251773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档