Как добавить параметры запроса в GetMethod (используя Java commons-httpclient)?
Используя 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, предназначенные для использования?
Ответы
Ответ 1
У методов почты есть параметры сообщений, но получить методы не.
Параметры запроса встроены в 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")
});
Ответ 2
Это не просто вопрос личных предпочтений. Уместная проблема здесь заключается в кодировании URL ваших значений параметров, так что значения не будут повреждены или неверно истолкованы как дополнительные разделители и т.д.
Как всегда, лучше всего прочитать документацию API:
Документация API HttpClient
Считая это, вы можете видеть, что setQueryString(String)
НЕ будет URL-кодировать или ограничивать ваши параметры и значения, тогда как setQueryString(NameValuePair[])
будет автоматически кодировать URL-адреса и ограничивать имена и значения параметров. Это лучший метод, когда вы используете динамические данные, поскольку он может содержать амперсанды, знаки равенства и т.д.
Ответ 3
Попробуйте так:
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());