2012-09-21 26 views
14

Tôi đang cố gắng gửi một HTTP GET với một đối tượng json trong cơ thể của nó. Có cách nào để thiết lập phần thân của HttpClient HttpGet không? Tôi đang tìm kiếm tương đương với HttpPost # setEntity.Apache HttpClient GET với cơ thể

+0

Hầu như lặp lại: http://stackoverflow.com/questions/978061/http-get-with-request-body –

+0

Nikita - Câu hỏi của tôi cũng tương tự như một trong những bạn đăng, tuy nhiên tôi đang yêu cầu cụ thể như thế nào làm như vậy thông qua API Apache HttpClient. Cảm ơn bạn mặc dù. –

+0

Câu trả lời là không thể. Yêu cầu GET không thể chứa nội dung theo đặc điểm kỹ thuật. Bạn cần sử dụng các yêu cầu POST. –

Trả lời

20

Từ những gì tôi biết, bạn không thể làm điều này với lớp HttpGet mặc định đi kèm với thư viện Apache. Tuy nhiên, bạn có thể phân lớp thực thể HttpEntityEnclosingRequestBase và đặt phương thức GET. Tôi đã không kiểm tra này, nhưng tôi nghĩ rằng ví dụ sau đây có thể được những gì bạn đang tìm kiếm:

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:

Bạn có thể sau đó làm như sau:

... 
HttpGetWithEntity e = new HttpGetWithEntity(); 
... 
e.setEntity(yourEntity); 
... 
response = httpclient.execute(e); 
+0

Đẹp. Cảm ơn bạn. –

+0

Bạn được chào đón. Hãy cho chúng tôi biết nếu nó hoạt động có lẽ? :) – torbinsky

+0

Cách tiếp cận này có hiệu quả không? – Jilberta

4

Sử dụng Câu trả lời của torbinsky tôi đã tạo ra lớp trên. Điều này cho phép tôi sử dụng các phương thức tương tự cho 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; 
    } 
} 
+0

Tôi đã thử mã trên với một dịch vụ web mà tôi cần phải nói chuyện với dự án của tôi và không đi. Tôi chỉ nhận được trên bản ghi dịch vụ daemon "Lỗi ứng dụng nội bộ, đóng kết nối." Jersey cung cấp một HttpGet với các thực thể (được gọi khác nhau), nhưng đáng tiếc apache thì không. Dịch vụ web cụ thể này thực sự mong đợi một yêu cầu GET và không phải là một POST. –

0

Làm thế nào chúng ta có thể gửi yêu cầu uri trong ví dụ này giống như 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); 
} 
Các vấn đề liên quan