In Java, using HttpPost (apache commons HttpClient

2019-06-25 02:31发布

我送使用一个RESTful JSON POST请求的Apache HttpClient的 (一个第三方API)

  • 我应该URL编码JSON的身体吗?

  • 而如果在内容的东西已经被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>"

是否有我需要做,以确保我送的是什么收到“原样”什么其他措施?

Answer 1:

有几分,你不必担心这里有两个背景:

  1. JSON
    你必须确保你生成JSON是有效的JSON(杜)。 这意味着确保所有{ }[ ]语法是在正确的地方,并确保您插入JSON对象的字段值都安全逃出(如逃避是HTML片段在你的问题-有些报价的字符需要进行转义)。 由于您使用的是标准的JSON Java库,您不必担心这个...这将照顾这一切为您服务。

  2. HTTP
    JSON字符串然后必须被插入到HTTP请求正文。 无法回避需要在这里完成 - 只需插入原始的JSON字符串。 HTTP,作为协议,将接受请求/响应机构,包括原始二进制数据内任何东西

无论如何,这是一种很长,但我希望它帮助。



Answer 2:

内容类型在您的HTTP标头应该是application / JSON,所以你不该URL编码的HTTP请求的主体。

URL编码是为了防止用户使用是在表示的URL(如“/”)特殊字符。

您不必担心内容被链接或者解码,除非你在你的HTTP标头表明服务器应该如应用/解码机构,使用的Content-Type X WWW的形式,进行了urlencoded



文章来源: In Java, using HttpPost (apache commons HttpClient) when sending JSON POST - should I URL encode the body?