簡體   English   中英

使用GET調用將JSON作為數據發送

[英]Sending json as data with GET call

我可以看到以下curl命令可以遠程運行:

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)將POST請求中的指定數據發送到HTTP服務器,就像用戶填寫HTML表單並按Submit按鈕時瀏覽器所做的一樣。 這將導致curl使用內容類型application / x-www-form-urlencoded將數據傳遞到服務器。 與-F,--form比較。

那么,如果我們使用-d發布數據,那么GET如何與curl配合使用?

另外,沒有HttpUrlConnection方法 Restlet方法可在GET調用中發送json。 在那兒 ?

根據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}

因此,此命令實際上確實導致curl發送帶有消息正文的GET請求。

這個問題對將GET與請求正文一起使用進行了廣泛的討論。 答案都同意,發送帶有消息正文的GET請求實際上不是非法的,但您不能指望服務器注意正文。 看來您正在使用的特定服務器確實可以處理這些請求,無論是由於錯誤,意外事故還是經過精心的設計決策。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM