使用时httr::GET
,在某些查询中它会替换%
具有安全代表%25
,但在其他查询中则不然。我找不到任何规则可以实现这种情况。
我正在使用 httr 1.4.1
示例查询在哪里%
被替换(请注意错误代码,并且输入的 URL 与返回的响应对象中的 URL 不同):
> httr::GET("jira.spring.io/rest/api/latest/search?jql=project=Spring%20Framework&startAt=0")
Response [https://jira.spring.io/rest/api/latest/search?jql=project=Spring%2520Framework&startAt=0]
Date: 2020-01-16 22:57
Status: 400
Content-Type: application/json;charset=UTF-8
Size: 196 B
查询未替换的位置(没有错误,响应中的 URL 与输入的相同):
> httr::GET("issues.jenkins-ci.org/rest/api/latest/search?jql=project='WEBSITE'%20OR%20project='Infrastructure'&startAt=0")
Response [https://issues.jenkins-ci.org/rest/api/latest/search?jql=project='WEBSITE'%20OR%20project='Infrastructure'&startAt=0]
Date: 2020-01-16 23:02
Status: 200
Content-Type: application/json;charset=UTF-8
Size: 430 kB
到底是怎么回事?这是 httr 中的错误吗?或者我应该改变一些参数GET()
call?
tldr; 将 HTTPS 请求与 jira.spring.io 结合使用以避免协议升级失败。
这不是 R/HTTR 问题。这是网站。比较 HTTP(“失败,神秘 %25”)和 HTTPS(“成功”)的结果:
-
{“errorMessages”:[“JQL 查询中的错误:字符 '%' 是保留的 JQL 字符。您必须将其括在字符串中或使用转义符 '\u0025' 代替。(第 1 行,字符 15)”] ,“错误”:{}}
-
{"errorMessages":["JQL 查询中出现错误:需要 'OR' 或 'AND',但得到的是 'Framework'。(第 1 行,第 16 字符)"],"errors":{}}
HTTP -> HTTPS 重定向协议升级中似乎存在“故障”,其响应标头如下:
Status Code: 301 Moved Permanently
Location: https://jira.spring.io/rest/api/latest/search?jql=project=Spring%252520Framework&startAt=0
^^^^^
因此解决方案是使用 HTTPS 端点并避开奇怪的目标位置..
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)