Подтвердить что ты не робот

Как добавить параметры запроса в 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, предназначенные для использования?

4b9b3361

Ответ 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());