之前的文章介绍过通过报文的方式HttpURLConnection提交post请求,今天介绍下通过Json参数的方法提交Post请求,先上代码

  1. public static HttpResponse sendPost(String url, String param, Charset charset) {
  2. try {
  3. URL httpurl = new URL(url);
  4. HttpURLConnection httpConn = (HttpURLConnection) httpurl.openConnection();
  5. httpConn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; "
  6. + "Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
  7. httpConn.setConnectTimeout(CONN_TIMEOUT);
  8. httpConn.setReadTimeout(READ_TIMEOUT);
  9. httpConn.setDoOutput(true);
  10. httpConn.setDoInput(true);
  11. httpConn.setUseCaches(false);
  12. httpConn.setRequestMethod("POST");
  13. httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset.name());
  14. httpConn.connect();
  15. OutputStream os = httpConn.getOutputStream();
  16. PrintWriter out = new PrintWriter(os);
  17. out.print(param);
  18. out.flush();
  19. out.close();
  20. os.close();
  21. HttpResponse response = new HttpResponse();
  22. response.setResponseStatus(httpConn.getResponseCode());
  23. response.setContentLength(httpConn.getContentLength());
  24. response.setContentType(httpConn.getContentType());
  25. response.setHeaderFields(httpConn.getHeaderFields());
  26. if (response.getResponseStatus() != && httpConn.getErrorStream() != null) {
  27. response.setErrorMessage(new String(IOUtils.readToByte(httpConn.getErrorStream()), charset));
  28. return response;
  29. }
  30. response.setResponseContent(httpConn.getInputStream());
  31. if (response.getContentType() == null || response.getContentType().startsWith("text")) {
  32. response.setContext(new String(IOUtils.readToByte(response.getResponseContent()), charset));
  33. }
  34. return response;
  35. }
  36. catch (IOException e) {
  37. throw new RuntimeException(String.format("url:%s,param:%s,message:%s", url, param, e.getMessage()), e);
  38. }
  39. }

我们先测试下:

  1. public static void main(String[] args) {
  2. HttpResponse resp = sendPost("http://www.cnblogs.com/shawWey/", "", Charset.forName("utf-8"));
  3. System.err.println(resp.getContext());
  4. System.err.println(resp.getErrorMessage());
  5. }

可以看到控制台输出

  1. <!DOCTYPE html>
  2. <html lang="zh-cn">
  3. <head>
  4. <meta charset="utf-8"/>
  5. <meta name="viewport" content="width=device-width, initial-scale=1" />
  6. <meta name="referrer" content="origin" />
  7. <title>shawWey - 博客园</title>
  8. <link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=giTNza-Of-PEt5UsELhFQAR7G6-bfaSa4oolcq7i9-o1"/>
  9. <link id="MainCss" type="text/css" rel="stylesheet" href="/skins/darkgreentrip/bundle-darkgreentrip.css?v=EjExWsdi8Ql8RA7Wdq4_YaeuMVhIAL6d2BSGbilapWY1"/>
  10. <link id="mobile-style" media="only screen and (max-width: 767px)" type="text/css" rel="stylesheet" href="/skins/darkgreentrip/bundle-darkgreentrip-mobile.css?v=6NcJHqsIyaE4w19VtgFvCFahrnr2rYCTRRTdxlMDhhQ1"/>
  11. <link title="RSS" type="application/rss+xml" rel="alternate" href="https://www.cnblogs.com/shawWey/rss"/>
  12. <link title="RSD" type="application/rsd+xml" rel="EditURI" href="https://www.cnblogs.com/shawWey/rsd.xml"/>
  13. <link type="application/wlwmanifest+xml" rel="wlwmanifest" href="https://www.cnblogs.com/shawWey/wlwmanifest.xml"/>
  14. <script src="//common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script>
  15. <script type="text/javascript">var currentBlogApp = 'shawWey', cb_enable_mathjax=false;var isLogined=false;</script>
  16. <script src="/bundles/blog-common.js?v=fobKU6DuMF7uNOMKEOEwhhLiN2dvU4IL2UfTDgUZOsY1" type="text/javascript"></script>
  17. </head>
  18. <body>
  19. <a name="top"></a>
  20.  
  21. <!--done-->
  22. <div id="home">
  23. <div id="header">
  24. <div id="blogTitle">
  25. <a id="lnkBlogLogo" href="https://www.cnblogs.com/shawWey/"><img id="blogLogo" src="/Skins/custom/images/logo.gif" alt="返回主页" /></a>
  26.  
  27. <!--done-->
  28. <h1><a id="Header1_HeaderTitle" class="headermaintitle" href="https://www.cnblogs.com/shawWey/">shawWey</a></h1>
  29. <h2>知识的搬运工~~~浪里格朗</h2>
  30.  
  31. </div><!--end: blogTitle 博客的标题和副标题 -->
  32. <div id="navigator">
  33.  
  34. <ul id="navList">
  35. <li><a id="blog_nav_sitehome" class="menu" href="https://www.cnblogs.com/">博客园</a></li>
  36. <li><a id="blog_nav_myhome" class="menu" href="https://www.cnblogs.com/shawWey/">首页</a></li>
  37. <li><a id="blog_nav_newpost" class="menu" rel="nofollow" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">新随笔</a></li>
  38. <li><a id="blog_nav_contact" class="menu" rel="nofollow" href="https://msg.cnblogs.com/send/shawWey">联系</a></li>
  39. <li><a id="blog_nav_rss" class="menu" href="https://www.cnblogs.com/shawWey/rss">订阅</a>
  40. <!--<a id="blog_nav_rss_image" class="aHeaderXML" href="https://www.cnblogs.com/shawWey/rss"><img src="//www.cnblogs.com/images/xml.gif" alt="订阅" /></a>--></li>
  41. <li><a id="blog_nav_admin" class="menu" rel="nofollow" href="https://i.cnblogs.com/">管理</a></li>
  42. </ul>
  43. <div class="blogStats">
  44.  
  45. <div id="blog_stats">
  46. <span id="stats_post_count">随笔 - &nbsp; </span>
  47. <span id="stats_article_count">文章 - &nbsp; </span>
  48. <span id="stats-comment_count">评论 - </span>
  49. </div>
  50.  
  51. </div><!--end: blogStats -->
  52. </div><!--end: navigator 博客导航栏 -->
  53. </div><!--end: header 头部 -->
  54.  
  55. <div id="main">
  56. <div id="mainContent">
  57. <div class="forFlow">
  58.  
  59. <!--done-->
  60.  
  61. .................

可见这种请求是可以的,接下来看下,如何拼接Json参数

  1.        Map<String, String> params = new HashMap<String, String>();
  2. params.put("apName", apName);
  3. params.put("apPassword", apPassword);
  4. params.put("srcId", srcId);
  5. params.put("ServiceId", ServiceId);
  6. params.put("sendTime", sendTime);
  7. params.put("content", "我是短信内容");
  8. params.put("calledNumber", "");

我们可以定义一个工具类进行参数的拼接

  1. public class StringUtils {
  2.  
  3. public static boolean isEmpty(String str) {
  4. return str == null || str.length() == ;
  5. }
  6.  
  7. public static String builderUrlParams(Map<String, String> params){
  8. Set<String> keySet = params.keySet();
  9. List<String> keyList = new ArrayList<String>(keySet);
  10. Collections.sort(keyList);
  11. StringBuilder sb = new StringBuilder();
  12. for (String key : keyList) {
  13. String value = params.get(key);
  14. if (StringUtils.isEmpty(value)) {
  15. continue;
  16. }
  17. sb.append(key);
  18. sb.append("=");
  19. try {
  20. sb.append(URLEncoder.encode(params.get(key),"UTF-8"));
  21. } catch (UnsupportedEncodingException e) {
  22. e.printStackTrace();
  23. }
  24. sb.append("&");
  25. }
  26. sb.deleteCharAt(sb.length() - );
  27. return sb.toString();
  28. }
  29.  
  30. }

完整的实例代码如下:

  1. String postUrl ="postUrl我短信url";
  2. String apName = "apName";
  3. String apPassword = "apPassword";
  4. String srcId = "";
  5. String ServiceId = "";
  6. String sendTime = "";
  7.  
  8. Map<String, String> params = new HashMap<String, String>();
  9. params.put("apName", apName);
  10. params.put("apPassword", apPassword);
  11. params.put("srcId", srcId);
  12. params.put("ServiceId", ServiceId);
  13. params.put("sendTime", sendTime);
  14. params.put("content", "我是短信内容");
  15. params.put("calledNumber", "");
  16. try {
  17. String param = StringUtils.builderUrlParams(params);
  18. HttpResponse response = HttpUtils.sendPost(postUrl, param, Charset.forName("utf-8"));
  19. String conent= response.getContext();
  20. int statusCode = response.getResponseStatus();
  21. if (statusCode == ) {
  22. //业务判断
  23. } else {
  24. throw new IllegalStateException("返回HTTP状态码错误!httpStatus=" + statusCode + "; context=" + conent);
  25. }
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }

结束!

②HttpURLConnection通过Json参数方式提交Post请求的更多相关文章

  1. Android 使用HttpClient方式提交POST请求

    final String username = usernameEditText.getText().toString().trim(); final String password = passwr ...

  2. Android 使用HttpClient方式提交GET请求

    public void httpClientGet(View view) { final String username = usernameEditText.getText().toString() ...

  3. nodejs的http.request使用post方式提交数据请求

    官方api文档 http://nodejs.org/docs/v0.6.1/api/http.html#http.request虽然也有POST例子,但是并不完整. 直接上代码:http_post.j ...

  4. bootstrap分页查询传递中文参数到后台(get方式提交)

    <!--分页 --> <div style="width: 380px; margin: 0 auto; margin-top: 50px;"> <u ...

  5. C# ContentType: "application/json" 请求方式传json参数问题

    处理Http请求时遇到的ContentType为application/json方式,记录下这种Post请求方式下如何传json参数: var request = (HttpWebRequest)We ...

  6. 黎活明8天快速掌握android视频教程--27_网络通信之通过GET和POST方式提交参数给web应用

    1该项目主要实现Android客户端以get的方式或者post的方式向java web服务器提交参数 Android客户端通过get方式或者post方式将参数提交给后台服务器,后台服务器对收到的参数进 ...

  7. android 之HttpURLConnection的post,get方式请求数据

    get方式和post方式的区别: 1.请求的URL地址不同: post:"http://xx:8081//servlet/LoginServlet" get:http://xxx: ...

  8. 导出excel时,以form方式提交json数据

    今天在写项目时写到一个excel的导出,开始想用ajax请求后台后导出,但发现ajax会有返回值,而且ajax无法直接输出文件,而后台的excel导出方法已经封装好,不方便修改. 就改用了提交的方式f ...

  9. node.js 下依赖Express 实现post 4种方式提交参数

    上面这个图好有意思啊,哈哈, v8威武啊.... 在2014年的最后一天和大家分享关于node.js 如何提交4种格式的post数据. 上上一篇说到了关于http协议里定义的4种常见数据的post方法 ...

随机推荐

  1. 用“倍增法”求最近公共祖先(LCA)

    1.最近公共祖先:对于有根树T的两个结点u.v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u.的祖先且x的深度尽可能大. 2.朴素算法:记录下每个节点的父亲,使节点u,v一步一步地向上找 ...

  2. Linux系统下chkconfig命令使用详解

    chkconfig命令可以用来检查.设置系统的各种服务 使用语法:chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代 ...

  3. 【Java并发】Executor框架

      Executor框架简介 Java的线程既是工作单元,也是执行机制.从JDK5开始,把工作单元和执行机制分离开来. Executor框架由3大部分组成 任务. 被执行任务需要实现的接口:Runna ...

  4. MySql 查询数据库中所有表名以及对比分布式库中字段和表的不同

    查询数据库中所有表名select table_name from information_schema.tables where table_schema='数据库名' and table_type= ...

  5. bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞

    没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...

  6. spring整合redis配置

    第一步:添加需要的jar包 <!-- redis --> <dependency> <groupId>redis.clients</groupId> & ...

  7. chrome关闭后还在进程中运行

    1.网上搜到信息: 设置 “即使关闭浏览器也后台运行” 取消打勾 2.然后我找了一下,应该是这个选项:“关闭 Google Chrome 后继续运行后台应用” 3. 4. 5.

  8. 谈谈你对Glide和Picasso他们的对比的优缺点

    1.Picasso和Glide的withi后面的参数不同 Picasso.with(这里只能传入上下文)     . Glide.with,后面可以传入上下文,activity实例,FragmentA ...

  9. 报错HTTP Status 500 - Unable to instantiate Action

    报错如下: HTTP Status 500 - Unable to instantiate Action, visitAction, defined for 'visit_toAddPage' in ...

  10. java项目生成jar,并在cmd中执行jar

    自己写的jar并使用:============Java项目============Jar包的打包在Eclipse中直接打包,具体步骤: 点击右键>export>jar file>取消 ...