Как подписать запрос GET, содержащий параметр запроса, с пробелом - PullRequest
1 голос
/ 25 января 2020

Желая использовать API поиска в Твиттере , все мои тесты в порядке, кроме тех, которые содержат пробел в моем поисковом запросе.

Пример: поиск с @RedouaneBali has:mentions построением запроса следующий запрос:

Request{method=GET, url=https://api.twitter.com/1.1/tweets/search/30day/dev.json?fromDate=201912261403&toDate=202001251248&maxResults=100&query=%40RedouaneBali%20has%3Amentions, tags={}}

и заканчивается этим {"error":{"message":"Could not authenticate you."}}

Итак, я пришел к выводу, что подписывающей частью был KO из-за пробела (без пробела на По моему запросу все работает хорошо). Я пытался заменить его на %20 или +, но он тоже не работает. Я использую этот класс Oauth1SigningInterceptor для подписи своих запросов.

Отладка внутри, я вижу, что мой параметр запроса сначала преобразуется из @RedouaneBali has:mentions в %40RedouaneBali+has%3Amentions, а затем в %2540RedouaneBali%2Bhas%253Amentions так что это может прийти отсюда, но это не так ясно для меня. Нормально ли иметь эту двойную подпись?

Есть идеи о том, как преобразовать ее в %20 вместо + или %2B?

Twitter Do c

1 Ответ

1 голос
/ 25 января 2020

Это была проблема ESCAPER, UrlEscapers.urlPathSegmentEscaper() преобразует пробел в %20, тогда как UrlEscapers.urlFormParameterEscaper() преобразует пробел в +. Двойное преобразование обычно основано на твиттерской документации. Смотрите исправленный файл здесь

...