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

Я следовал этому другому вопросу SO чтобы установить параметр для URL, но он выдавал ошибку:

Метод setQueryString(String) в типе HttpMethodBase неприменим для аргументов (NameValuePair[])

а также

Не удается создать экземпляр типа NameValuePair.

Я не могу понять настоящую проблему. Может ли кто-нибудь помочь мне в этом?

Код, который я использовал из приведенного выше вопроса

GetMethod method = new GetMethod("example.com/page";); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 

person Java Questions    schedule 26.04.2013    source источник
comment
Вы убрали здесь лишнюю точку с запятой "example.com/page";   -  person vikingsteve    schedule 26.04.2013
comment
Вы используете httpclient 3.x или 4.x? Пример, который вы приводите, является типичным кодом 3.x, а не 4.x.   -  person NilsH    schedule 26.04.2013
comment
Vikingsteve удалил эту точку с запятой уже при выполнении кода   -  person Java Questions    schedule 26.04.2013
comment
Отличный NilsH, я использую 4.x :). Как установить параметры при использовании 4.x?   -  person Java Questions    schedule 26.04.2013
comment
@Анто уверен? В версии 4.x класс GetMethod отсутствует. Согласно javadoc это HttpGet   -  person Vasyl Keretsman    schedule 26.04.2013


Ответы (3)


В HttpClient 4.x больше нет GetMethod. Вместо этого есть HttpGet. Цитирую пример из учебника:

Параметры запроса в URL:

HttpGet httpget = new HttpGet(
 "http://www.google.com/search?hl=en&q=httpclient&btnG=Google+Search&aq=f&oq=");

Программное создание строки запроса:

URIBuilder builder = new URIBuilder();
builder.setScheme("http").setHost("www.google.com").setPath("/search")
    .setParameter("q", "httpclient")
    .setParameter("btnG", "Google Search")
    .setParameter("aq", "f")
    .setParameter("oq", "");
URI uri = builder.build();
HttpGet httpget = new HttpGet(uri);
System.out.println(httpget.getURI());
person NilsH    schedule 26.04.2013
comment
Я также должен добавить, что httpclient 4.x и httpclient 3.x имеют совершенно разные API. Примеры, которые вы найдете для httpclient 3.x, скорее всего, не будут работать с 4.x. - person NilsH; 26.04.2013
comment
Я пытаюсь использовать HTTPclient 4.2.5 с REST API SalesForce, и это не работает - установка параметра приводит к странице с ошибкой, а использование setQueryString с API 3.1 приводит к JSON... Любые подсказки? - person Daniil Shevelev; 06.07.2013

Интерфейсы не могут быть созданы напрямую, вы должны создавать экземпляры классов, которые реализуют такие интерфейсы.

Попробуй это:

NameValuePair[] params = new BasicNameValuePair[] {
        new BasicNameValuePair("param1", param1),
        new BasicNameValuePair("param2", param2),
};
person pancho.gb.cu    schedule 09.07.2014

Вы можете передать параметр запроса в URL-адресе.

String uri = "example.com/page?key=value";
HttpClient httpClient = new DefaultHttpClient();
HttpGet method = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(method);
BufferedReader br = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
String content="", line;
while ((line = br.readLine()) != null) {
     content = content + line;
}
System.out.print(content);
person Anurag Tripathi    schedule 26.04.2013
comment
В версии, которую я использовал, нет GetMethod. Пожалуйста, ознакомьтесь с комментариями, которые я предоставил. - person Java Questions; 26.04.2013
comment
Я изменил свой ответ в соответствии с вашим httpclient 4.x - person Anurag Tripathi; 26.04.2013