java模拟Http请求

   http请求分多种,接下来只考虑post方式-非喜勿喷,求拍砖~

   使用java编程模拟http请求以post方式大致分为以下步骤:

   一、通过抓包工具(或者浏览器自带的调试工具)来获取http请求的具体信息,如Request URL、User-Agent、Accept-Language、Accept-Encoding、cookie等信息,其中较关键的是要先找出Request URL、User-Agent(目前遇到过这两种)、cookie(作为备选有些网站需要这个)、charset(防止乱码时才需要非核心);

   二、利用上一步获取的数据以及成熟的在线http模拟请求工具快速定位关键的头信息是完成代码的关键步骤;

   三、目前通过在线的方式进行http请求的调试工具可以快速分辨出那些请求头信息是不可缺少的,推荐网址:http://www.sojson.com/httpRequest/(该工具多种多样,可自选)

   以上是开发的准备工作,只有获取到关键的请求信息才能减少不必要的浪费

   java实现(非原创)

       

URL realUrl = new URL("");
HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
// 连接超时
conn.setConnectTimeout(50000);
// 读取超时 --服务器响应比较慢,增大时间
conn.setReadTimeout(50000);
// 自动重定向
HttpURLConnection.setFollowRedirects(true);
// 请求方式
conn.setRequestMethod("POST");
// url是否可以进行输出
conn.setDoOutput(true);
// url是否可以进行输入
conn.setDoInput(true);
// 添加头信息
conn.setRequestProperty(
		"User-Agent",
		"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36");
// 发起连接
conn.connect();
// 获取URLConnection对象对应的输出流
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
// 发送请求参数
out.write("txt=" + URLEncoder.encode(params, "UTF-8"));
out.flush();
out.close();
// 获取返回的信息
InputStream in = conn.getInputStream();
BufferedReader read = new BufferedReader(new InputStreamReader(in,
		"UTF-8"));
String valueString = null;
while ((valueString = read.readLine()) != null) {
	bufferRes.append(valueString);
}
in.close();
if (conn != null) {
	conn.disconnect();
}

//解析over

相关推荐