httr заменяет «%» на «% 25» в URL-адресе. - PullRequest
3 голосов
/ 17 января 2020

При использовании httr::GET в некоторых запросах он заменяет % на безопасное представление %25, но в других запросах - нет. Я не могу найти ни одного правила, которое могло бы сделать это.

Я использую httr 1.4.1

Пример запроса, в котором заменено % (обратите внимание на код ошибки и введенный 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() вызове?

1 Ответ

4 голосов
/ 17 января 2020

tldr; использовать HTTPS-запросы с jira.spring.io , чтобы избежать неправильного обновления протокола.


Это не проблема R / HTTR. Это веб-сайт. Сравните результаты HTTP («сбой с тайной% 25») и HTTPS («преуспевающий»):

Похоже, что в обновлении протокола HTTP -> HTTPS перенаправления имеется «сбой», который имеет следующий заголовок ответа:

Status Code: 301 Moved Permanently
Location: https://jira.spring.io/rest/api/latest/search?jql=project=Spring%252520Framework&startAt=0
                                                                          ^^^^^

Таким образом, решение состоит в том, чтобы использовать конечную точку HTTPS и избежать странной цели Местоположение ..

...