博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java模拟http的get和post请求
阅读量:6849 次
发布时间:2019-06-26

本文共 4538 字,大约阅读时间需要 15 分钟。

如题,使用Java模拟GET和POST请求。使用GET可以实现网页抓取,使用POST可以实现

对某些网站登录的暴力破解。
不过仅是练习,实际意义不大。

import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.io.Reader;import java.net.HttpURLConnection;import java.net.ProtocolException;import java.net.URL;import java.util.Map;/** * HTTP工具 * @author robinzhang * */public class HttpUtil {    /**     * 请求类型: GET     */    public final static String GET = "GET";    /**     * 请求类型: POST     */    public final static String POST = "POST";        /**     * 模拟Http Get请求     * @param urlStr     *             请求路径     * @param paramMap     *             请求参数     * @return     * @throws Exception     */    public static String get(String urlStr, Map
paramMap) throws Exception{ urlStr = urlStr + "?" + getParamString(paramMap); HttpURLConnection conn = null; try{ //创建URL对象 URL url = new URL(urlStr); //获取URL连接 conn = (HttpURLConnection) url.openConnection(); //设置通用的请求属性 setHttpUrlConnection(conn, GET); //建立实际的连接 conn.connect(); //获取响应的内容 return readResponseContent(conn.getInputStream()); }finally{ if(null!=conn) conn.disconnect(); } } /** * 模拟Http Post请求 * @param urlStr * 请求路径 * @param paramMap * 请求参数 * @return * @throws Exception */ public static String post(String urlStr, Map
paramMap) throws Exception{ HttpURLConnection conn = null; PrintWriter writer = null; try{ //创建URL对象 URL url = new URL(urlStr); //获取请求参数 String param = getParamString(paramMap); //获取URL连接 conn = (HttpURLConnection) url.openConnection(); //设置通用请求属性 setHttpUrlConnection(conn, POST); //建立实际的连接 conn.connect(); //将请求参数写入请求字符流中 writer = new PrintWriter(conn.getOutputStream()); writer.print(param); writer.flush(); //读取响应的内容 return readResponseContent(conn.getInputStream()); }finally{ if(null!=conn) conn.disconnect(); if(null!=writer) writer.close(); } } /** * 读取响应字节流并将之转为字符串 * @param in * 要读取的字节流 * @return * @throws IOException */ private static String readResponseContent(InputStream in) throws IOException{ Reader reader = null; StringBuilder content = new StringBuilder(); try{ reader = new InputStreamReader(in); char[] buffer = new char[1024]; int head = 0; while( (head=reader.read(buffer))>0 ){ content.append(new String(buffer, 0, head)); } return content.toString(); }finally{ if(null!=in) in.close(); if(null!=reader) reader.close(); } } /** * 设置Http连接属性 * @param conn * http连接 * @return * @throws ProtocolException * @throws Exception */ private static void setHttpUrlConnection(HttpURLConnection conn, String requestMethod) throws ProtocolException{ conn.setRequestMethod(requestMethod); conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("Accept-Language", "zh-CN"); conn.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"); conn.setRequestProperty("Proxy-Connection", "Keep-Alive"); if(null!=requestMethod && POST.equals(requestMethod)){ conn.setDoOutput(true); conn.setDoInput(true); } } /** * 将参数转为路径字符串 * @param params * 参数 * @return */ private static String getParamString(Map
paramMap){ if(null==paramMap || paramMap.isEmpty()){ return ""; } StringBuilder builder = new StringBuilder(); for(String key : paramMap.keySet() ){ builder.append("&") .append(key).append("=").append(paramMap.get(key)); } return builder.deleteCharAt(0).toString(); } public static void main(String[] args){ try { System.out.println( get("http://127.0.0.1/crazy_java.pdf", null) ); } catch (Exception e) { e.printStackTrace(); } }}

转载于:https://www.cnblogs.com/amunote/p/4126548.html

你可能感兴趣的文章
让网站可以从根目录访问,但仍然可以放在一个文件夹里的方法
查看>>
POJ 3009 Curling 2.0 DFS
查看>>
hrabs的数据库session的修改
查看>>
wcf服务契约继承
查看>>
领域驱动设计概述
查看>>
JNDI新随笔
查看>>
综合练习:词频统计
查看>>
PE渲染引擎 二
查看>>
array 的方法
查看>>
samil添加if语句
查看>>
斯坦福的nlp学习
查看>>
centos 防火墙设置
查看>>
Lucene.net入门学习(结合盘古分词)(转载)
查看>>
我心中的核心组件(可插拔的AOP)~第三回 日志记录组件之log4net
查看>>
DDD~Unity在DDD中的使用
查看>>
在react中实现打印功能
查看>>
实现动态系统托盘图标
查看>>
互联网部-供应商团队js规范
查看>>
用Office Viso 2010创建SharePoint 2010 工作流
查看>>
用Python写一个小爬虫吧!
查看>>