2015-04-28 81 views
0

我可以看到下面的curl命令進行遠程操作:發送JSON數據與GET調用

curl -X GET -d '{"begin":22, "end":33}' http://myRemoteApp.com:8080/publicApi/user/test/data 

但是按照該文檔在http://curl.haxx.se/docs/manpage.html

-d,--data

(HTTP)發送在以同樣的方式,一個瀏覽器,當用戶已經填充在一個HTML 形式,並按下POST請求發送到HTTP服務器, 指定數據的提交,但是噸。這將導致curl將 數據傳遞給使用內容類型 application/x-www-form-urlencoded的服務器。與-F,--form比較。

那麼,如果我們使用-d發佈數據,GET如何處理curl?

還沒有HttpUrlConnection方法ORRestlet方法在GET呼叫發送JSON。在那兒 ?

+0

的可能重複[如何從終端/命令行POST,捲曲JSON數據來測試彈簧安置?](http://stackoverflow.com/questions/7172784/how-to-post-json-data-with-curl - 從端子用命令行對測試彈簧休息) –

+0

@GauravDave:不,我不認爲這是一個重複的。 – Makoto

+0

這是一個不尋常的HTTP請求,但有些服務器顯然接受它。 –

回答

3

根據curl文檔,-X強制將方法字設置爲特定值,而不管它是否產生合理的請求。我們可以跟蹤,看看它實際上在這種情況下,將運行curl

$ curl -X GET -d '{"begin":22, "end":33}' --trace-ascii - http://localhost:8080/ 
== Info: About to connect() to localhost port 8080 (#0) 
== Info: Trying ::1... == Info: connected 
== Info: Connected to localhost (::1) port 8080 (#0) 
=> Send header, 238 bytes (0xee) 
0000: GET/HTTP/1.1 
0010: User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 
0050: NSS/3.14.3.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 
0084: Host: localhost:8080 
009a: Accept: */* 
00a7: Content-Length: 22 
00bb: Content-Type: application/x-www-form-urlencoded 
00ec: 
=> Send data, 22 bytes (0x16) 
0000: {"begin":22, "end":33} 

所以這個命令事實上確實造成捲曲發了郵件正文的GET請求。

This question具有使用GET與請求身體的某些廣泛的討論。答案同意,發送帶有消息正文的GET請求實際上不是非法的,但您不能指望服務器關注正文。看來你正在使用其特定的服務器確實處理這些請求,無論是由於一個錯誤,幸運的意外,或故意設計決策。

+0

GET請求 - 身體是一個完全有效的HTTP請求。不尋常的。 –