Как добавить параметры запроса в GetMethod (используя Java commons-httpclient)?
-
03-07-2019 - |
Вопрос
Как использовать Apache commons-httpclient для Java, каков наилучший способ добавить параметры запроса в экземпляр GetMethod? Если я использую PostMethod, это очень просто:
PostMethod method = new PostMethod();
method.addParameter("key", "value");
GetMethod не имеет " addParameter " метод, хотя. Я обнаружил, что это работает:
GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
new NameValuePair("key", "value")
});
Однако большинство примеров, которые я видел, либо жестко запрограммировали параметры непосредственно в URL, например:
GetMethod method = new GetMethod("http://www.example.com/page?key=value");
или жестко закодируйте строку запроса, например:
GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");
Является ли один из этих шаблонов предпочтительным? И почему API расхождение между PostMethod и GetMethod? И для чего предназначены все эти другие методы HttpMethodParams?
Решение
Методы публикации имеют параметры публикации, но методы получения не . р>
Параметры запроса встраиваются в URL. Текущая версия HttpClient принимает строку в конструкторе. Если вы хотите добавить ключ, пара значений выше, вы можете использовать:
String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);
Хорошее начальное руководство можно найти на странице Apache Jakarta Commons . р>
Обновление . Как указано в комментарии, NameValuePair работает.
GetMethod method = new GetMethod("example.com/page");
method.setQueryString(new NameValuePair[] {
new NameValuePair("key", "value")
});
Другие советы
Это не просто вопрос личных предпочтений. Здесь уместной проблемой является URL-кодирование значений ваших параметров, чтобы значения не были повреждены или неправильно истолкованы как дополнительные разделители и т. Д.
Как всегда, лучше подробно прочитать документацию по API: Документация по API HttpClient
Прочитав это, вы увидите, что setQueryString (String)
НЕ будет URL-кодировать или разграничивать ваши параметры & amp; значения, тогда как setQueryString (NameValuePair [])
будет автоматически кодировать URL-адреса и разграничивать имена и значения параметров. Это лучший метод, когда вы используете динамические данные, поскольку они могут содержать амперсанды, знаки равенства и т. Д.
Попробуйте это так:
URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
.addParameter("client_id", application.getKey())
.addParameter("client_secret", application.getSecret())
.addParameter("redirect_uri", callbackURL)
.addParameter("code", code);
HttpPost method = new HttpPost(builder.build());