2012-03-28 30 views
5

Sử dụng cURL Tôi có thể gửi yêu cầu GET với nội dung. Ví dụ:HTTPBuilder set requestBody trên phương thức GET

curl -i -X GET http://localhost:8081/myproject/someController/l2json -H "content-type: application/json" -d "{\"stuff\":\"yes\",\"listThing\":[1,2,3],\"listObjects\":[{\"one\":\"thing\"},{\"two\":\"thing2\"}]}" 

Đây là JSON trong một định dạng hợp lý vì mức độ dễ đọc của:

{"stuff":"yes", 
"listThing":[1,2,3], 
"listObjects":[{"one":"thing"},{"two":"thing2"}]} 

thường -d sẽ nói cURL để gửi một POST nhưng tôi đã xác nhận rằng -X GET được trọng điều đó và nó là gửi GET. Có thể sao chép điều này bằng HTTPBuilder không?

Tôi đã làm:

def http = new HTTPBuilder('http://localhost:8081/') 

http.post(path:'/myproject/myController/l2json', body:jsonMe, requestContentType:ContentType.JSON) { resp -> 
    println "Tweet response status: ${resp.statusLine}" 
    assert resp.statusLine.statusCode == 200 
} 

Những công trình, nhưng nếu tôi thay đổi .post-.get tôi nhận được lỗi:

Cannot set a request body for a GET method. Stacktrace follows: 
Message: Cannot set a request body for a GET method 
Line | Method 
->> 1144 | setBody    in groovyx.net.http.HTTPBuilder$RequestConfigDelegate 

Có cách nào để gửi một GET với một cơ thể yêu cầu sử dụng HTTPBuilder?

Trả lời

2

Câu trả lời ngắn: Số

Long trả lời: Các HTTPBuilder không cho phép bạn thiết lập các phương thức HTTP cho một yêu cầu bất cứ lúc nào khác hơn khi thực sự tạo ra một yêu cầu. Các tham số cũng được thiết lập khi tạo ra bởi một bao đóng kiểm tra kiểu yêu cầu và ném ngoại lệ đó nếu yêu cầu không thuộc kiểu HttpEntityEnclosingRequest.

Bạn có thể kiểm tra mã nguồn ở đây: https://fisheye.codehaus.org/browse/gmod/httpbuilder/trunk/src/main/java/groovyx/net/http/HTTPBuilder.java?hb=true

Trên một mặt lưu ý, HTTP 1.1 spec không nói thẳng thừng rằng một GET không thể có một cơ thể, nhưng nó nói rằng nếu một yêu cầu ngữ nghĩa doesn không cho phép một, sau đó nó không được cung cấp, và rằng các máy chủ nhận được yêu cầu như vậy nên bỏ qua nó.

Vì hầu hết mọi người đã quen với quy ước đó, tôi khuyên bạn nên gắn bó với nó và không thực sự sử dụng dịch vụ của bạn khi gửi yêu cầu GET.

Xem thêm câu hỏi này: HTTP GET with request body

Các vấn đề liên quan