簡體   English   中英

在Java中,在發送JSON POST時使用HttpPost(apache commons HttpClient) - 我應該對身體進行URL編碼嗎?

[英]In Java, using HttpPost (apache commons HttpClient) when sending JSON POST - should I URL encode the body?

我正在使用Apache HttpClient發送RESTful JSON POST請求(到第三方API)

  • 我應該對JSON正文進行URL編碼嗎?

  • 如果內容中的某些內容已經過URL編碼(例如,我發送的HTML與URL編碼字符有一些鏈接,例如@ 22),我是否希望在沒有解碼的情況下獲取另一端的內容?

例如,如果我正在做這樣的事情

String html = "<a href='http://example.com?charOfTheDay=%22'>click me</a>";
// Build the JSON object 

JSONObject jsonObj = new JSONObject();
jsonObj.put("html", html);
jsonObj.put("otherKey",otherValue);
//...

// Create the POST object and add the parameters
HttpPost httpPost = new HttpPost(url);
StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8);
entity.setContentType("application/json");
httpPost.setEntity(entity);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(httpPost);

在獲得“html”鍵的值后,我是否希望在接收端獲得相同的值?

例如在接收端

//after parsing the request string to a JSON object
String html = inputJsonObject.get("html") 
// should return "<a href='http://example.com?charOfTheDay=%22'>click me</a>"

我還需要做任何其他步驟來確保我發送的內容是“按原樣”收到的內容嗎?

這里有兩種情況需要你擔心:

  1. JSON
    您必須確保您生成的JSON是有效的JSON(duh)。 這意味着確保所有{ }[ ]語法都在正確的位置並確保您插入到JSON對象中的字段值被安全地轉義(例如在您的問題中轉義HTML片段 - 引用的一些內容)字符需要轉義)。 但是因為您使用的是標准的JSON Java庫,所以您不必擔心這一點......它將為您解決所有這些問題。

  2. HTTP
    然后必須將JSON字符串插入HTTP請求正文中。 這里不需要進行轉義 - 只需插入原始JSON字符串即可。 HTTP作為協議,將接受請求/響應主體內的任何內容 ,包括原始二進制數據。

無論如何,這有點長,但我希望它有所幫助。

http標頭中的Content-Type應該是application / json,所以你不應該對http請求的主體進行URL編碼。

URL編碼旨在防止用戶使用特殊表示URL的字符(例如“/”)。

您不必擔心要解碼的內容中的鏈接,除非您在http標頭中使用Content-Type表示服務器應解碼正文,例如application / x-www-form-urlencoded

暫無
暫無

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

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