Я пытаюсь отправить HTTP GET с объектом json в его теле. Есть ли способ установить тело HttpClient HttpGet? Я ищу эквивалент HttpPost # setEntity.
Apache HttpClient GET с телом
Ответ 1
Из того, что я знаю, вы не можете сделать это со стандартным классом HttpGet, который поставляется с библиотекой Apache. Однако вы можете подклассифицировать объект HttpEntityEnclosingRequestBase и установить метод GET. Я не тестировал это, но я думаю, что следующий пример может быть тем, что вы ищете:
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase {
public final static String METHOD_NAME = "GET";
@Override
public String getMethod() {
return METHOD_NAME;
}
}
Edit:
Затем вы можете сделать следующее:
...
HttpGetWithEntity e = new HttpGetWithEntity();
...
e.setEntity(yourEntity);
...
response = httpclient.execute(e);
Ответ 2
Используя торбинский ответ, я создал класс выше. Это позволяет мне использовать те же методы для HttpPost.
import java.net.URI;
import org.apache.http.client.methods.HttpPost;
public class HttpGetWithEntity extends HttpPost {
public final static String METHOD_NAME = "GET";
public HttpGetWithEntity(URI url) {
super(url);
}
public HttpGetWithEntity(String url) {
super(url);
}
@Override
public String getMethod() {
return METHOD_NAME;
}
}
Ответ 3
Как мы можем отправить запрос uri в этом примере, как HttpGet и HttpPost???
public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase
{
public final static String METHOD_NAME = "GET";
@Override
public String getMethod() {
return METHOD_NAME;
}
HttpGetWithEntity e = new HttpGetWithEntity();
e.setEntity(yourEntity);
response = httpclient.execute(e);
}