需要使用HttpClient 4.5.2来做POST传参数到某个网站,得到相应的功能。
最近花了些时间在API上,通过JSON来调用几个功能。但是怎么传参数很头疼。
JSON需要理解得透彻一些,我是通过以下这个免费的视频,加深了对JSON的理解:
http://study.163.com/course/courseMain.htm?courseId=1295002
看了一些网上的介绍,最后是这样的做的:先形成一个字符串json(只是名字叫json而已),这个字符串就是标准的JSON字符串。确保这个字符串是正确的,然后把它代入httpPost的Entity,再执行POST操作(CloseableHttpResponse response2 = httpclient.execute(httpPost);)
这个方式最简单最直接,最容易验证。代码片段如下:
String json ="{\"subject\""+":"+"\""+T_subject+"\""+","+"\"description\""+":"+"\""+T_description+"\""+","+"\"status\""+":"+"\"new\""+","+"\"requester\""+":"+"{\"id\""+":"+requesterID+"}"+","+"\"serviceDesk\""+":"+"{\"id\""+":"+serviceDeskID+"}"+","+"\"engineer\""+":"+"{\"id\""+":"+engineerID+"}"+"}";
System.out.println("json tring ================="+json);
StringEntity requestEntity = new StringEntity(json, "utf-8");
httpPost.setEntity(requestEntity);
HttpEntity entity_POST = httpPost.getEntity();
String entityString = EntityUtils.toString(entity_POST);
System.out.println("POSTentityString="+entityString);
// System.out.println("POSTentityStringby_nvps="+nvps.toString());
// returnValue = httpclient.execute(httpPost, responseHandler);
CloseableHttpResponse response2 = httpclient.execute(httpPost);
try {
// System.out.println(response2.getStatusLine());
HttpEntity entity2 = response2.getEntity();
// System.out.println("VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVresponese2entityString="+EntityUtils.toString(entity2));
ContentType contentType2 = ContentType.getOrDefault(entity2);
Charset charset2 = contentType2.getCharset();
System.out.println("----------------------------------------------get_respone2_ContentType="+contentType2);
System.out.println("----------------------------------------------get_respone2_entityCharset="+charset2);
Reader reader2 = new InputStreamReader(entity2.getContent(), charset2);
System.out.println("==============================================get_respone2_entityReader="+reader2);
System.out.println("==============================================get_respone2_entityReader="+reader2.toString());
// do something useful with the response body
// and ensure it is fully consumed
EntityUtils.consume(entity2);
与此博客关联的另外一个博客,是写如何查看网站返回的加密数据的,如下:
http://blog.youkuaiyun.com/qxd100/article/details/52675362
同时,其他的一些Httpclient 解析 Json 数据的一些文章的收集如下,供参考:
这个比较实用:
http://blog.youkuaiyun.com/zhanghaonana/article/details/51792962
这个比较简洁:
http://blog.youkuaiyun.com/u014614038/article/details/49800709
这个也比较简洁:
http://zhcheng.iteye.com/blog/1292350
这个是讨论,包含了去官网的说明的链接:
http://bbs.youkuaiyun.com/topics/391887692
这个比较长的,比较详细:
http://itindex.net/detail/52566-httpclient