Как добавить параметры запроса в GetMethod (используя Java commons-httpclient)?

StackOverflow https://stackoverflow.com/questions/217070

  •  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());
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top