在web应用程序中,一般都是通过页面发送http的post请求,但也可以使用java程序来模拟页面发送请求,代码如下:

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.HttpURLConnection;
public class TestPost {
public static void testPost() throws IOException {
/**
* 首先要和URL下的URLConnection对话。 URLConnection可以很容易的从URL得到。比如: // Using
* java.net.URL and //java.net.URLConnection
*
* 使用页面发送请求的正常流程:在页面http://www.faircanton.com/message/loginlytebox.asp中输入用户名和密码,然后按登录,
* 跳转到页面http://www.faircanton.com/message/check.asp进行验证
* 验证的的结果返回到另一个页面
*
* 使用java程序发送请求的流程:使用URLConnection向http://www.faircanton.com/message/check.asp发送请求
* 并传递两个参数:用户名和密码
* 然后用程序获取验证结果
*/
URL url = new URL("http://www.faircanton.com/message/check.asp");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
/**
* 然后把连接设为输出模式。URLConnection通常作为输入来使用,比如下载一个Web页。
* 通过把URLConnection设为输出,你可以把数据向你个Web页传送。下面是如何做:
*/
connection.setDoOutput(true);
connection.setRequestMethod("POST");
/**
* 最后,为了得到OutputStream,简单起见,把它约束在Writer并且放入POST信息中,例如: ...
*/
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "8859_1");
out.write("username=kevin&password=*********"); //向页面传递数据。post的关键所在!
// remember to clean up
out.flush();
out.close();
/**
* 这样就可以发送一个看起来象这样的POST:
* POST /jobsearch/jobsearch.cgi HTTP 1.0 ACCEPT:
* text/plain Content-type: application/x-www-form-urlencoded
* Content-length: 99 username=bob password=someword
*/
// 一旦发送成功,用以下方法就可以得到服务器的回应:
String sCurrentLine;
String sTotalString;
sCurrentLine = "";
sTotalString = "";
InputStream l_urlStream;
l_urlStream = connection.getInputStream();
// 传说中的三层包装阿!
BufferedReader l_reader = new BufferedReader(new InputStreamReader(
l_urlStream));
while ((sCurrentLine = l_reader.readLine()) != null) {
sTotalString += sCurrentLine + "/r/n"; }
System.out.println(sTotalString);
} public static void main(String[] args) throws IOException {
testPost();
}
}

这个程序我已经测试通过的。

如果除了post一些数据外,还要上传文件,可以使用下面两个函数之一:

 /**
* 通过HTTP协议向指定的网络地址发送文件。
* @param params 传输过程中需要传送的参数
* @param filename 需要传送的文件在本地的位置。
* @throws TransferException
*/
public String doPost(HashMap params, InputStream stream)
throws TransferException
{
URLConnection conn = null; // URL连结对象。
BufferedReader in = null; // 请求后的返回信息的读取对象。
String keyName = null;
try
{
conn = url.openConnection();
conn.setUseCaches(false);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "multipart/form-data"); // 设置参数
if (params != null)
{
Set keys = params.keySet();
// 遍历参数集取得参数名称和值
if (!keys.isEmpty())
{
Iterator iterator = keys.iterator();
while (iterator.hasNext())
{
keyName = (String) iterator.next();
// 将参数加入到连接对象中
conn.addRequestProperty(
keyName,
(String) params.get(keyName));
}
}
}
// 构造传输文件
//FileInputStream fis = new FileInputStream(filename);
BufferedInputStream bis = new BufferedInputStream( stream );
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch;
while ((ch = bis.read()) != -1)
baos.write(ch);
byte[] fileData = baos.toByteArray(); // 传输文件。
DataOutputStream dos =
new DataOutputStream(
new BufferedOutputStream(conn.getOutputStream()));
dos.write(fileData);
dos.flush();
dos.close(); in =
new BufferedReader(
new InputStreamReader(conn.getInputStream()));
//in.close();
}
catch (FileNotFoundException fe)
{
InputStream err = ((HttpURLConnection) conn).getErrorStream();
if (err == null)
throw new TransferException("网络传输时发生的未知错误");
in = new BufferedReader(new InputStreamReader(err));
}
catch (IOException ioe)
{
ioe.printStackTrace();
throw new TransferException("网络传输错误!");
} // 返回提示信息
StringBuffer response = new StringBuffer();
String line;
try
{
while ((line = in.readLine()) != null)
response.append(line + "/n");
in.close();
}
catch (IOException ioe)
{
ioe.getStackTrace();
throw new TransferException("网络响应错误!");
}
return response.toString();
} /**
* 通过HTTP协议向指定的网络地址发送文件。
* @param params 传输过程中需要传送的参数
* @param data 需要传送的内容。
* @throws TransferException
*/
public InputStream doPost(HashMap params, byte[] data)
throws TransferException
{
URLConnection conn = null; // URL连结对象。
BufferedReader in = null; // 请求后的返回信息的读取对象。
String keyName = null;
try
{
conn = url.openConnection();
conn.setUseCaches(false);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "multipart/form-data"); // 设置参数
if (params != null)
{
Set keys = params.keySet();
// 遍历参数集取得参数名称和值
if (!keys.isEmpty())
{
Iterator iterator = keys.iterator();
while (iterator.hasNext())
{
keyName = (String) iterator.next();
// 将参数加入到连接对象中
conn.addRequestProperty(
keyName,
(String) params.get(keyName));
}
}
} // 传输文件。
DataOutputStream dos =
new DataOutputStream(
new BufferedOutputStream(conn.getOutputStream()));
dos.write(data);
dos.flush();
dos.close();
return conn.getInputStream();
}
catch (FileNotFoundException fe)
{
InputStream err = ((HttpURLConnection) conn).getErrorStream();
if (err == null)
throw new TransferException("网络传输时发生的未知错误");
else
throw new TransferException("未知错误");
}
catch (IOException ioe)
{
ioe.printStackTrace();
throw new TransferException("网络传输错误!");
}
}

这两个函数是公司的员工写的,还没有用实际的例子测试过。

我们还可以使用htmlparse的jar包(该包及相关文档可以在http://htmlparser.sourceforge.net/这里下载)提供的函数对获取的html进行解析
例子如下:

 import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.TableTag;
import org.htmlparser.util.NodeList;
public class TestHTMLParser {
public static void testHtml() {
try {
String sCurrentLine;
String sTotalString;
sCurrentLine = "";
sTotalString = "";
java.io.InputStream l_urlStream;
java.net.URL l_url = new java.net.URL("http://www.ideagrace.com/html/doc/2006/07/04/00929.html");
java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();
l_connection.connect();
l_urlStream = l_connection.getInputStream();
java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream));
while ((sCurrentLine = l_reader.readLine()) != null) {
sTotalString += sCurrentLine+"/r/n";
// System.out.println(sTotalString);
}
String testText = extractText(sTotalString);
System.out.println( testText ); } catch (Exception e) {
e.printStackTrace();
} } public static String extractText(String inputHtml) throws Exception {
StringBuffer text = new StringBuffer();
Parser parser = Parser.createParser(new String(inputHtml.getBytes(),"GBK"), "GBK");
// 遍历所有的节点
NodeList nodes = parser.extractAllNodesThatMatch(new NodeFilter() {
public boolean accept(Node node) {
return true;
}
}); System.out.println(nodes.size()); //打印节点的数量
for (int i=0;i<nodes.size();i++){
Node nodet = nodes.elementAt(i);
//System.out.println(nodet.getText());
text.append(new String(nodet.toPlainTextString().getBytes("GBK"))+"/r/n");
}
return text.toString();
} public static void test5(String resource) throws Exception {
Parser myParser = new Parser(resource);
myParser.setEncoding("GBK");
String filterStr = "table";
NodeFilter filter = new TagNameFilter(filterStr);
NodeList nodeList = myParser.extractAllNodesThatMatch(filter);
TableTag tabletag = (TableTag) nodeList.elementAt(11); } public static void main(String[] args) throws Exception {
// test5("http://www.ggdig.com");
testHtml();
}
}

使用java程序模拟页面发送http的post请求的更多相关文章

  1. HTTPS的页面发送不了HTTP请求?——关于混合内容

    我们都知道HTTPS的页面是发送不了HTTP请求的,那么是什么原因导致HTTPS页面不能发送HTTP请求呢?如果有发送的需求,怎么样才能发送?最近刚好遇到了这个问题,而且搜了半天没搜到靠谱的答案,所以 ...

  2. 用java程序模拟网站的登录以及文件批量上传

    import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; ...

  3. 【转载】Java程序模拟公安局人员管理系统

    编程题:公安人员的管理系统1) 学生类:a) 属性:i. 身份号—默认没有,需要手动进行输入ii. 姓名iii. 性别iv. 年龄v. 密码vi. 居住地址vii. 注册日期viii. 人员的信誉程度 ...

  4. java apache commons HttpClient发送get和post请求的学习整理(转)

    文章转自:http://blog.csdn.net/ambitiontan/archive/2006/01/06/572171.aspx HttpClient 是我最近想研究的东西,以前想过的一些应用 ...

  5. C#模拟http 发送post或get请求

    /// <summary> /// 模拟HTTP提交表单并获取返回数据 /// POST /// </summary> /// <param name="Url ...

  6. 【转】C#模拟http 发送post或get请求

    原文地址:http://www.cnblogs.com/xssxss/archive/2012/07/03/2574554.html 模拟POST Json public static string ...

  7. java Web中页面跳转方式之请求转发

    1.在一个请求中跨越多个Servlet 2.多个Servlet在一个请求中,他们共享request对象.就是在Servlet01中setAttribute()保存数据在Servlet02中由getAt ...

  8. C#代码模拟http发送get和post请求

    private string HttpPost(string Url, string postDataStr) { HttpWebRequest request = (HttpWebRequest)W ...

  9. Java通过http协议发送Get和Post请求

    https://blog.csdn.net/qq_32599479/article/details/94439131

随机推荐

  1. 前端框架---jQuery---一分钟下载使用

    这里通过自己手动的方式“做”一个jQuery来使用,需要5步 1. 访问 https://jquery.com 2. 点击download 3. 拉到最下方,点击 JQuery CDN 4. 得到所有 ...

  2. Find the Duplicate Number (寻找重复数字)

    对于一个长度为n+1的数组,其中每一个值的取值范围是[1,n],可以证明的是必然存在一个重复数字(抽屉原理),假设仅存在一个重复数字,找到他. 举例:输入:[1,3,4,2,1],输出:1 自己做的时 ...

  3. 20155323 2016-2017-2 《Java程序设计》第一周学习总结

    20155323 2016-2017-2 <Java程序设计>第一周学习总结 1.浏览教材,根据自己的理解每章提出一个问题 第一章:既然JDK本身附有一个JRE,那么JRE和JDK的区别在 ...

  4. ARKit-1

    1.1-AR技术简介 增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像.视频.3D模型的技术,这种技术的目标是在屏幕上把虚拟世界套在 ...

  5. PHP Redis 缓存数据

    // 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档// 配置文件define('CONFIG', [ 'redis-server' => '127.0.0.1', 'redis-po ...

  6. PHP手动环境搭建之WAMP

    第一步:安装apache程序 首先需要去Apache官网下载Apache2.4(http://httpd.apache.org/download.cgi),操作如下图所示: 下载完成后把它解压出来,然 ...

  7. NO.04--我的使用心得之使用vue绑定class名

    今天聊一聊这个话题,其实方式有很多种,我今天介绍几种我使用到的,各位看官耐心看: 一.用 变量形式 绑定单个 Class 名 在 vue 中绑定单个 class 名还好说,直接写就可以了 <te ...

  8. 3.5星|《哈佛商学院最受欢迎的领导课》:讲给CEO的管理学常识、常见错误和改进方法

    哈佛商学院最受欢迎的领导课 英文版出版于2011年,还不算旧.中信2013年出过一版,这版估计是英文书版权过期后重新购买了再出版. 全书以写给CEO的口吻讲了许多管理常识,包含一些CEO容易犯的问题和 ...

  9. 二维DCT变换

    DCT(Discrete Consine Transform),又叫离散余弦变换,它的第二种类型,经常用于信号和图像数据的压缩.经过DCT变换后的数据能量非常集中,一般只有左上角的数值是非零的,也就是 ...

  10. PHP性能优化 -理论篇

    什么情况下,遇到了PHP性能问题?    1 PHP语法使用的不恰当    2 使用PHP语言做不了它不擅长做的事    3 用php语言连接的服务不给力    4 PHP自身的短板    5 我也不 ...