#java #okhttp
#java #okhttp
Вопрос:
У меня есть HTTP-URL:
HttpUrl httpurl = new HttpUrl.Builder()
.scheme("https")
.host("www.example.com")
.addQueryParameter("parameter", "p")
.addPathSegment("extrasegment")
.build();
Параметр запроса всегда заканчивается последним. Как я могу обеспечить соблюдение того порядка, который я хочу?
Редактировать:
Причина, по которой я пытаюсь добиться этого, заключается в том, что я хочу иметь доступ к определенным конечным точкам, которые отформатированы следующим образом:
https://host/api/{parameter}/anothersegment
Комментарии:
1. В спецификации URI указано, что параметры запроса всегда следуют за сегментами пути. (См tools.ietf.org/html/rfc3986#section-3 ) Таким образом, «параметр запроса», который вы предлагаете, на самом деле не является параметром запроса, а скорее частью сегмента пути. Было бы полезно, если бы вы могли добавить пример результата, которого вы пытаетесь достичь.
2. Будет ли желаемым результатом приведенного выше кода быть
https://host/api/p/anothersegment
илиhttps://host/api/parameter=p/anothersegment
(затем правильно закодированный URL-адрес)?3. Спасибо вам обоим за ввод. В конце концов, ответ @JensV помог мне найти решение.
Ответ №1:
Я предполагаю (из исходного вопроса), что требуется что-то вроде следующего:
https://www.example.com/?param=p/anothersegment
Принимая во внимание спецификацию URI, которая определяет это:
scheme ":" hier-part [ "?" query ] [ "#" fragment ]
URL-адрес будет выглядеть примерно так:
scheme = https
hier-part = www.example.com/
query = param=p/anothersegment
Чего вы можете добиться следующим образом:
HttpUrl httpurl = new HttpUrl.Builder()
.scheme("https")
.host("www.example.com")
.addEncodedQueryParameter("param", "p/anotersegment")
// Use `EncodedQueryParamter` to prevent escaping the slashes and other special characters. (You need to escape values yourself though)
.build();
Хотя из редактирования можно предположить, что вы хотите добиться чего-то подобного:
https://www.example.com/foo=bar/baz=xy
Где foo=bar
и baz=xy
— это просто дополнительные сегменты пути, которые вы можете добавить с помощью addPathSegment