web-dev-qa-db-ja.com

Apache HttpClient GET with body

本体にjsonオブジェクトを含むHTTPGETを送信しようとしています。 HttpClient HttpGetの本体を設定する方法はありますか? HttpPost#setEntityに相当するものを探しています。

20
Scott Swank

私の知る限り、Apacheライブラリに付属しているデフォルトのHttpGetクラスではこれを行うことはできません。ただし、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;
    }
}

編集:

次に、次のことを実行できます。

...
HttpGetWithEntity e = new HttpGetWithEntity();
...
e.setEntity(yourEntity);
...
response = httpclient.execute(e);
29
torbinsky

トルビンスキーの答えを使って、上記のクラスを作成しました。これにより、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;
    }
}
5
icapurro

Torbinskyの答えに加えて、これらのコンストラクターをクラスに追加して、URIの設定を簡単にすることができます。

public HttpGetWithEntity(String uri) throws URISyntaxException{
    this.setURI(new URI(uri));
}

public HttpGetWithEntity(URI uri){
    this.setURI(uri);
}

setURIメソッドはHttpEntityEnclosingRequestBaseから継承され、コンストラクターの外部で使用することもできます。

0
Brandon Lyday

この例では、HttpGetとHttpPostのようにリクエストURIを送信する方法???

 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); 
}
0
user2389517