Apache Http Client - прекратить удаление двойных слешей с URL - PullRequest
0 голосов
/ 08 февраля 2019

Я использую Apache HTTP Components Client 4.5.7 для запроса URL-адреса с двойной косой чертой.Когда я смотрю на журнал проводов, я вижу, что двойная косая черта была «исправлена», чтобы быть только одной косой чертой.К сожалению, это нежелательное поведение для меня, так как это приведет к сбою запроса.

Справочная информация. Я запрашиваю изображения с измененным размером с Thumbor (сервер изменения размера изображения).URL-адрес Thumbor в основном будет выглядеть следующим образом:

этот URL-адрес заставит thumbor загружать http://host.com/image.jpg и изменять его размер в соответствии с размером 200x200 пикселей.

Код выглядит следующим образом:

HttpGet httpUriRequest = new HttpGet("http://thumbors-server/usafe/200x200/http://host.com/image.jpg");
CLIENT.execute(httpUriRequest, responseHandler); 

То, что httpclient отправляет на сервер.однако это так:

DEBUG o.a.h.headers     http-outgoing-1 >> GET /unsafe/300x300/http:/host.com/image1.jpg HTTP/1.1 
DEBUG o.a.h.headers     http-outgoing-1 >> Host: localhost:4002 
DEBUG o.a.h.headers     http-outgoing-1 >> Connection: Keep-Alive 
DEBUG o.a.h.headers     http-outgoing-1 >> User-Agent: Apache-HttpClient/4.5.7 (Java/11.0.1) 
DEBUG o.a.h.headers     http-outgoing-1 >> Accept-Encoding: gzip,deflate 

обратите внимание, что http://host.com был заменен на http: /host.com (обратите внимание на отсутствующую секунду /).Это приведет к сбою запроса.

Как я могу помешать http-клиенту "исправить" URL-адрес, который я передаю ему?

1 Ответ

0 голосов
/ 14 марта 2019

Проблема в URIUtils.rewriteURI(), где этот код:

final StringBuilder buf = new StringBuilder(path.length());
boolean foundSlash = false;
for (int i = 0; i < path.length(); i++) {
    final char ch = path.charAt(i);
    if (ch != '/' || !foundSlash) {
        buf.append(ch);
    }
    foundSlash = ch == '/';
}
uribuilder.setPath(buf.toString());

Таким образом, двойные косые черты в пути uri всегда заменяются одной косой чертой.Вы можете использовать другой http-клиент, такой как OkHttp , который не делает эту нормализацию.

...