通过HttpURLConnection模拟post表单提交

  1. package junit;
  2.  
  3. import java.io.InputStream;
  4. import java.net.HttpURLConnection;
  5. import java.net.URL;
  6.  
  7. import org.junit.Test;
  8.  
  9. import com.hrtx.util.StreamTool;
  10.  
  11. public class EsmTest {
  12.  
  13. /**
  14. * 通过HttpURLConnection模拟post表单提交
  15. * @throws Exception
  16. */
  17. @Test
  18. public void sendEms() throws Exception {
  19. String wen = "MS2201828";
  20. String btnSearch = "EMS快递查询";
  21. URL url = new URL("http://www.kd185.com/ems.php");
  22. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  23. conn.setRequestMethod("POST");// 提交模式
  24. // conn.setConnectTimeout(10000);//连接超时 单位毫秒
  25. // conn.setReadTimeout(2000);//读取超时 单位毫秒
  26. conn.setDoOutput(true);// 是否输入参数
  27.  
  28. StringBuffer params = new StringBuffer();
  29. // 表单参数与get形式一样
  30. params.append("wen").append("=").append(wen).append("&")
  31. .append("btnSearch").append("=").append(btnSearch);
  32. byte[] bypes = params.toString().getBytes();
  33. conn.getOutputStream().write(bypes);// 输入参数
  34. InputStream inStream=conn.getInputStream();
  35. System.out.println(new String(StreamTool.readInputStream(inStream), "gbk"));
  36.  
  37. }
  38.  
  39. }
  1. 封装后的代码:
  2.  
  3.    /**
  4. * 通过HttpURLConnection模拟post表单提交
  5. *
  6. * @param path
  7. * @param params 例如"name=zhangsan&age=21"
  8. * @return
  9. * @throws Exception
  10. */
  11. public static byte[] sendPostRequestByForm(String path, String params) throws Exception{
  12. URL url = new URL(path);
  13. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  14. conn.setRequestMethod("POST");// 提交模式
  15. // conn.setConnectTimeout(10000);//连接超时 单位毫秒
  16. // conn.setReadTimeout(2000);//读取超时 单位毫秒
  17. conn.setDoOutput(true);// 是否输入参数
  18. byte[] bypes = params.toString().getBytes();
  19. conn.getOutputStream().write(bypes);// 输入参数
  20. InputStream inStream=conn.getInputStream();
  21. return StreamTool.readInputStream(inStream);
  22. }
  1. package com.hrtx.util;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.InputStream;
  5.  
  6. public class StreamTool {
  7. /**
  8. * 从输入流中读取数据
  9. * @param inStream
  10. * @return
  11. * @throws Exception
  12. */
  13. public static byte[] readInputStream(InputStream inStream) throws Exception{
  14. ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  15. byte[] buffer = new byte[1024];
  16. int len = 0;
  17. while( (len = inStream.read(buffer)) !=-1 ){
  18. outStream.write(buffer, 0, len);
  19. }
  20. byte[] data = outStream.toByteArray();//网页的二进制数据
  21. outStream.close();
  22. inStream.close();
  23. return data;
  24. }
  25. }

通过HttpURLConnection模拟post表单提交的更多相关文章

  1. js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题

    js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题 js模拟form表单提交数据源码: /** * js模拟form表单提交 * @param ...

  2. js_ajax模拟form表单提交_多文件上传_支持单个删除

    需求场景: 用一个input type="file"按钮上传多张图片,可多次上传,可单独删除,最后使用ajax模拟form表单提交功能提交到指定方法中: 问题:由于只有一个file ...

  3. Linux curl 模拟form表单提交信息和文件

    Linux curl 模拟form表单提交信息和文件   curl是一个命令行方式下传输数据的开源传输工具,支持多种协议:FTP.HTTP.HTTPS.IMAP.POP3.TELNET等,功能超级强大 ...

  4. jquery模拟form表单提交并新打开页面

    /** * form表单提交本页面打开 * @param url * @param params */ function postCurrent(url,params){ var form = $(& ...

  5. Java模拟POST表单提交HttpClient操作

    public static void Login() { String url = "http://www.***.com/login"; PostMethod postMetho ...

  6. Ajax模拟Form表单提交,含多种数据上传

    ---恢复内容开始--- Ajax提交表单.使用FormData提交表单数据和上传的文件(这里的后台使用C#获取,你可以使用Java一样获取) 有时候前台的数据提交到后台,不想使用form表单上传,希 ...

  7. java模拟from表单提交,上传图片

    /** * java上传表单,有图片 * @param urlStr 上传地址 * @param textMap 表单参数 * @param fileMap 文件参数 key:文件名称 value:文 ...

  8. C#模拟POST表单提交 --- WebClient

    string postString = "arg1=a&arg2=b";//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面每一个name都要加进 ...

  9. 模拟post表单提交参数

    Content-Type: application/x-www-form-urlencoded;charset=utf-8

随机推荐

  1. Swift教程之typealias代替OC的typedef

    //MARK:-------swift中的typedef-------------- //使用 keyword定义类型别名,相似typedef typealias NSInteger = Int va ...

  2. POJ 3481 & HDU 1908 Double Queue (map运用)

    题目链接: PKU:http://poj.org/problem?id=3481 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1908 Descript ...

  3. Servlet的学习之Response响应对象(2)

    本篇接上一篇<Servlet的学习之Response响应对象(1)>,继续从HttpServletResponse响应对象来介绍其方法和功能. 使用setHeader方法结合HTTP协议的 ...

  4. 快速排序算法之我见(附上C代码)

    因为<The C Programming Language>一书中有一个练习,需要用到快速排序,所以又复习了一下,感觉收获颇多,故而分享之. 快速排序的核心是一种 divide and c ...

  5. Raspberry pi raspbain系统下使用vim

    一开始 apt-get install vim不好用. 在putty中执行这条命令就可以了. sudo apt-get update && sudo apt-get install v ...

  6. 介绍SAP预留函数创建搜索帮助

    紧接上一节介绍的SAP预定义的出口函数F4IF_SHLP_EXIT_EXAMPLE创建搜索帮助, 该函数主要有两个部分: Changing接口的参数属性如下: SHLP:搜索帮助的基础描述,包括搜索帮 ...

  7. 关于ListCtrol自绘的技巧

    一.给控件添加排序功能report风格的list控件很多情况下都需要支持排序功能,而且最好支持按不同列进行排序.CListCtrl的类方法SortItems支持排序功能,但是在排序过程中,两个数据真正 ...

  8. 关于jquery文件上传插件 uploadify 3.1的使用

    要使用uplaodify3.1,自然要下载相应的包,下载地址http://www.uploadify.com/download/,这里有两种包,一个是基于flash,免费的,一个是基于html5,需要 ...

  9. Swift - 按钮(UIButton)的用法

    1,按钮的创建 (1)按钮有下面四种类型: UIButtonType.ContactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 UIButtonType.DetailDisc ...

  10. Python爬行动物(一):基本概念

    定义网络爬虫          网络爬虫(Web Spider,也被称为网络蜘蛛,网络机器人,也被称为网页追逐者).按照一定的规则,维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁,自己主动索引 ...