Android/Java 中利用HttpClient 发送Patch请求,携带Json参数
2015-06-15 17:13
615 查看
由于项目的需要,在前面记录过利用HttpUrlConnection发送Put请求的方法,链接在这http://blog.csdn.net/crystaldestiny/article/details/46469465,现在,项目中又有需要以Patch方式发送Http请求,真心感觉这两种凡是用得不是很多,网上的资料也很有限,参考过网上一些帖子的后,算是实现了!在此记录一下,本人也是菜鸟,欢迎交流学习!通过查看HttpUrlConnection的相关资发现,该类应该不支持Patch方式的Http请求,但是通过功能更加强大的Apache HttpClient却可以轻松实现PUT和PATCH请求,先来看一看,利用HttpClient实现Put请求的代码:
上面的代码应该很简单,基本上跟利用HttpClient发送Post请求一样,只需要将
说明:由于项目需要,传入的参数和返回值都是JSONObject对象。[/code]
public static JSONObject executeHttpPut(String url,JSONObject jsonParam){ JSONObject resultObj = null; HttpClient httpClient = new DefaultHttpClient(); HttpPut httpPut = new HttpPut(url); httpPut.setHeader("Content-type", "application/json"); httpPut.setHeader("Charset", HTTP.UTF_8); httpPut.setHeader("Accept", "application/json"); httpPut.setHeader("Accept-Charset", HTTP.UTF_8); try { if (jsonParam != null) { StringEntity entity = new StringEntity(jsonParam.toString(),HTTP.UTF_8); httpPut.setEntity(entity); } HttpResponse response = httpClient.execute(httpPut); resultObj = new JSONObject(EntityUtils.toString(response.getEntity())); } catch (IOException | ParseException | JSONException e) { e.printStackTrace(); } return resultObj; }
上面的代码应该很简单,基本上跟利用HttpClient发送Post请求一样,只需要将
HttpPost httpPost = new HttpPost(url);
改成 <pre name="code" class="java">HttpPut httpPut = new HttpPut(url);
就OK了。
</pre><pre name="code" class="java">对于Patch请求,查看HttpClient的API可以看到,在其给出的API中,并没有所期待的HttpPatch类,也有人说在最新的版本里面好像是有HttpPatch这个类的,应为手上是个Android项目,可能android版本中集成 的HttpClient版本比较低,确实找不到HttpPatch这个类(在java项目中,可以去下载最新的Apache HttpClient 包),但是参考http://www.bubuko.com/infodetail-72930.html这个帖子的做法,完全可以满足需求,即<span style="color: rgb(63, 63, 63); font-family: 'Microsoft YaHei'; font-size: 14px; line-height: 30px;">重写一下 HttpPut 或 HttpPost 的 getMethod 方法</span>
代码如下:
public class HttpPatch extends HttpPut { public HttpPatch(String url) { super(url); } @Override public String getMethod() { return "PATCH"; } }这里要说的是,确实如参考的文章所说,重写HttpPut或者HttpPost的getMethod方法都是一样的,都可以实现。
然后利用上面的HttpPatch类,发送带有
public static JSONObject executeHttpPatch(String url,JSONObject jsonParam){ JSONObject resultObj = null; HttpClient httpClient = new DefaultHttpClient(); HttpPatch httpPatch = new HttpPatch(url); httpPatch.setHeader("Content-type", "application/json"); httpPatch.setHeader("Charset", HTTP.UTF_8); httpPatch.setHeader("Accept", "application/json"); httpPatch.setHeader("Accept-Charset", HTTP.UTF_8); try { if (jsonParam != null){ StringEntity entity = new StringEntity(jsonParam.toString(),HTTP.UTF_8); httpPatch.setEntity(entity); } HttpResponse response = httpClient.execute(httpPatch); resultObj = new JSONObject(EntityUtils.toString(response.getEntity())); } catch (ParseException | JSONException | IOException e) { e.printStackTrace(); } return resultObj; }
说明:由于项目需要,传入的参数和返回值都是JSONObject对象。[/code]
从代码可以看到,其实重写一下 HttpPut 或 HttpPost 的 getMethod 方法之后,发送Patch请求跟发送Put和Post请求基本上没有什么区别!
欢迎交流学习!
相关文章推荐
- AsyncHttpClient
- rtp与rtcp协议详解
- Android异步加载获取网络数据(图片)
- 用Fildder抓取Android的HTTP包
- Android以请求参数来获取网络数据
- Servlet--HttpUtils类
- Servlet--HttpUtils类
- Servlet--HttpSessionBindingListener接口,HttpSessionBindingEvent类
- Servlet--HttpSessionBindingListener接口,HttpSessionBindingEvent类
- Servlet--HttpSession接口,HttpSessionContext接口,Cookie类
- Servlet--HttpSession接口,HttpSessionContext接口,Cookie类
- 2分法求 2^n 和 矩阵的n次方 转:http://blog.csdn.net/maiyuetong/article/details/6762206
- Linux服务器上监控网络带宽的18个常用命令
- 方向的选择,数据库?网络编程?其他?
- httpclient在抓取网页时出现速度慢的情况分析
- HTTP cookies 详解
- nginx 设置匿名http正向代理
- Android中判断网络是否处于连接状态
- centos网络配置
- wireshark抓包分析