[使用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()
调用中更改某些参数?
tldr; 与jira.spring.io一起使用HTTPS请求,以避免协议升级失败。
这不是R / HTTR问题。这是网站。比较HTTP(“失败%25”)和HTTPS(“成功”)的结果:
http://jira.spring.io/rest/api/latest/search?jql=project=Spring%20Framework&startAt=0
{“ errorMessages”:[“ JQL查询中的错误:字符'%'是保留的JQL字符。您必须将其括在字符串中或使用转义符'\ u0025'。(第1行,字符15) “],”错误“:{}}
https://jira.spring.io/rest/api/latest/search?jql=project=Spring%20Framework&startAt=0
{“ 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端点