java模拟浏览器请求

java模拟浏览器请求

通常有两种方式

方式一:用jdk原始提供的类

jdk提供的比较单一基础。

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class PostForm {
	
	public static void main(String []args) {
		String url = "http://localhost:8080/test/login.do";
		String params = "username=xxx&password=xxx";
		System.out.println(getSoundCode(url,params,"utf-8"));
	}

	/**
	 * 获取网页内容
	 * @param url 网址
	 * @param encoding 编码方式
	 * @param params 表单参数
	 * @return 网页内容
	 */
	public static String getSoundCode(String url,  String params ,String encoding) {
		try {
			HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
			connection.setDoOutput(true);
			connection.setRequestMethod("POST");
			OutputStream os = connection.getOutputStream();
			os.write(params.getBytes());
			os.close();
			InputStream input = connection.getInputStream();
			InputStreamReader read = new InputStreamReader(input, encoding);
			BufferedReader reader = new BufferedReader(read);
			String line;
			StringBuilder result = new StringBuilder();
			while ((line = reader.readLine()) != null) {
				result.append(line+"\n") ;
			}
			reader.close();
			read.close();
			input.close();
			return result.toString();
		} catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
	}
}


 

方式二:用Apache提供的jar包

所需最小jar下载地址:

http://yun.baidu.com/share/link?shareid=1795594075&uk=170295677

它为开发人员提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,

Commons-HttpClient项目就是专门设计并用来简化HTTP客户端与服务器进行各种通讯编程实现的

它能实现常规的HTTP客户端程序(也就是浏览器程序)的各种功能。

重点:可以模拟浏览器保持回话,这样有些需要登录才能操作的就可以用这个。例如一个自动回帖功能,或者网络爬虫。

 

简单例子如下:

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

public class Test {
	
	/**
	 * 得到一个表单提交对象
	 * @param url 提交的网址
	 * @param parms 提交表单的内容
	 * @return 表单提交对象
	 */
	public static PostMethod getPostMethod(String url,String parms) {
		PostMethod rs = new PostMethod(url);
		rs.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gb2312");
		if(parms == null) {
			return rs;
		}
		String [] values = parms.split("&");
		NameValuePair [] pairs = new NameValuePair[values.length];
		String [] temp;
		for(int i=0;i<values.length;i++) {
			temp = values[i].split("=");
			pairs[i] = new NameValuePair(temp[0],temp[1]);
		}
		rs.setRequestBody(pairs);
		return rs;
	}
	
	/**
	 * 获取表单提交返回结果
	 * @param client 相当于浏览器对象
	 * @param post 提交对象
	 * @return 返回的内容 
	 * @throws IOException
	 */
	public static String getContent(HttpClient client,PostMethod post) throws IOException {
		String content = null;
		client.executeMethod(post);
		if (post.getStatusCode() == HttpStatus.SC_OK) {
			content = post.getResponseBodyAsString(); 
		} 
		else {
			throw new RuntimeException("获取网络内容出错!");
		}
		post.releaseConnection();
		return content;
	}

	public static void main(String[] args) throws Exception {
		HttpClient client = new HttpClient();
		String url = "http://172.0.0.1:8080/test//login.do";
		String parms = "action=login&username=xxx&password=xxx";
		
		PostMethod post = getPostMethod(url,parms);
		System.out.println(getContent(client,post));
		
		post = getPostMethod("http://172.0.0.1:8080/test/test.do",null);
		System.out.println(getContent(client,post));
	}
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值