原始java写的模拟HTTP请求
package com.fc.utility; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.nio.CharBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.b3log.latke.Keys; import org.b3log.latke.model.User; import org.b3log.latke.util.CollectionUtils; import org.b3log.latke.util.Sessions; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.json.JSONException; import org.json.JSONObject; /** * the https method * * */ public class HttpsMethod { /** * post方法 * * @param url * String 访问的URL * @param param * String 提交的内容 * @param repType * 返回类型 * @return String * */ public static String postRequest(String url, String param, String repType) { PrintWriter out = null; BufferedReader in = null; String result = ""; try { /** * 第一部分 */ URL urlObj = new URL(url); HttpURLConnection con = (HttpURLConnection) urlObj.openConnection(); /** * 设置关键值 */ con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式 con.addRequestProperty("Accept-Language", "zh-cn"); con.addRequestProperty("Content-type", repType); con.addRequestProperty( "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)"); con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false); // post方式不能使用缓存 // 设置请求头信息 con.setRequestProperty("Connection", "Keep-Alive"); con.setRequestProperty("Charset", "UTF-8"); // 获取URLConnection对象对应的输出流 out = new PrintWriter(con.getOutputStream()); // 发送请求参数 out.print(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(con.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!" + e); e.printStackTrace(); } // 使用finally块来关闭输出流、输入流 finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } /** * get方法提交 * * @param url * String 访问的URL * @param param * String 提交的内容 * @param repType * 返回类型 * @return String * */ public static byte[] getRequest(String url, String repType) { String result = ""; byte[] resByt = null; try { URL urlObj = new URL(url); HttpURLConnection conn = (HttpURLConnection) urlObj .openConnection(); // 连接超时 conn.setDoInput(true); conn.setDoOutput(true); conn.setConnectTimeout(25000); // 读取超时 --服务器响应比较慢,增大时间 conn.setReadTimeout(25000); conn.setRequestMethod("GET"); conn.addRequestProperty("Accept-Language", "zh-cn"); conn.addRequestProperty("Content-type", repType); conn.addRequestProperty( "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)"); conn.connect(); PrintWriter out = new PrintWriter(new OutputStreamWriter( conn.getOutputStream(), "UTF-8"), true); if ("image/jpeg".equals(repType)) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); BufferedImage bufImg = ImageIO.read(conn.getInputStream()); ImageIO.write(bufImg, "jpg", outputStream); resByt = outputStream.toByteArray(); outputStream.close(); } else { // 取得输入流,并使用Reader读取 System.out.println("set utf-8 decode..."); BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream(), "utf-8")); System.out.println("============================="); System.out.println("Contents of get request"); System.out.println("============================="); String lines = null; while ((lines = reader.readLine()) != null) { System.out.println(lines); result += lines; result += "\r"; } resByt = result.getBytes(); reader.close(); } out.print(resByt); out.flush(); out.close(); // 断开连接 conn.disconnect(); System.out.println("============================="); System.out.println("Contents of get request ends"); System.out.println("============================="); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return resByt; } public static String fileUploadReuest(String url, String filePath, String repType) { String result = ""; File file = new File(filePath); try { /** * 第一部分 */ URL urlObj = new URL(url); HttpURLConnection con = (HttpURLConnection) urlObj.openConnection(); /** * 设置关键值 */ con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式 con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false); // post方式不能使用缓存 // 设置请求头信息 con.setRequestProperty("Connection", "Keep-Alive"); con.setRequestProperty("Charset", "UTF-8"); // 设置边界 String BOUNDARY = "----------" + System.currentTimeMillis(); con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); // 请求正文信息 // 第一部分: StringBuilder sb = new StringBuilder(); sb.append("--"); // ////////必须多两道线 sb.append(BOUNDARY); sb.append("\r\n"); sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n"); sb.append("Content-Type:application/octet-stream\r\n\r\n"); byte[] head = sb.toString().getBytes("utf-8"); // 获得输出流 OutputStream out = new DataOutputStream(con.getOutputStream()); out.write(head); // 文件正文部分 DataInputStream in = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } in.close(); // 结尾部分 byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线 out.write(foot); out.flush(); out.close(); /** * 读取服务器响应,必须读取,否则提交不成功 */ // return con.getResponseCode(); /** * 下面的方式读取也是可以的 */ // 定义BufferedReader输入流来读取URL的响应 BufferedReader reader = new BufferedReader(new InputStreamReader( con.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { result += line; } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NullPointerException e) { // TODO: handle exception } return result; } @SuppressWarnings("unchecked") public static Map<String, String> parseXml(HttpServletRequest req) { Map<String, String> map = new HashMap<String, String>(); InputStream inputStream = null; try { inputStream = req.getInputStream(); SAXReader reader = new SAXReader(); Document document; document = reader.read(inputStream); Element root = document.getRootElement(); List<Element> elementList = root.elements(); for (Element e : elementList) map.put(e.getName(), e.getText()); } catch (Exception e1) { e1.printStackTrace(); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { } } } return map; } public static String formatRequestToKey(HttpServletRequest req, String templateName) { Object[] keys = null; Enumeration e = req.getAttributeNames(); List<String> vs = new ArrayList<String>(); while (e.hasMoreElements()) { String key = e.nextElement().toString(); if (!StringUtils.isEmpty(key)) { vs.add(key); } } keys = vs.toArray(); Arrays.sort(keys); String url = req.getRequestURL().toString(); String uuid = ""; for (int j = 0; j < keys.length; j++) { uuid += keys[j] + ":" + req.getParameter(keys[j].toString()) + "-"; } String userUUID = ""; HttpSession session = Sessions.getSession(req); if (session != null) { Object user = session.getAttribute(User.USER); if (user != null) { try { userUUID = ((JSONObject) user).getString(Keys.OBJECT_ID); } catch (JSONException e1) { } } } uuid = url + uuid + userUUID; if (!StringUtils.isEmpty(templateName)) { uuid += "/" + templateName; } return uuid; } }
相关推荐
- 在Java模拟中,可以设定目标IP为广播地址(如255.255.255.255),使ARP请求覆盖整个网络。 4. WinPcap的使用: - WinPcap是Windows系统上的底层网络接口,允许应用程序访问网络接口的原始数据包。 - 安装...
提供的"test"测试类可能包含示例代码,演示如何使用这个库来模拟请求并获取这些详细信息。 为了有效地利用这个库,开发者需要了解如何配置和使用HTTP4j的API,包括设置请求参数、添加自定义头信息、处理响应等。...
在Java编程中,`java.net.URLConnection`是用于与网络资源建立连接的类,它可以用来发送HTTP请求。这篇博客文章可能详细介绍了如何使用URLConnection来实现这个功能。在Java中,当我们需要与Web服务器进行交互,比如...
标题中的“模拟http请求客户端.7z”表明这是一个用于测试和调试HTTP协议的工具,而描述中提到的“postman”是业界广受欢迎的这样一个工具,特别指出是2019年6月19日的最新版本,适用于Windows 64位操作系统。...
在Java Web开发中,我们经常需要处理HTTP请求,其中包含了客户端传递给服务器的数据。这些数据通常以请求参数的形式存在,例如URL查询参数、POST表单数据等。在某些情况下,我们可能需要在服务器端动态地修改这些...
### Java模拟人工洗牌知识点解析 #### 一、概述 本篇主要介绍如何利用Java语言实现一种模拟人工洗牌的功能。在程序设计中,洗牌算法通常用来随机化一组元素的顺序,使得每次运行程序时都能得到不同的结果,这对于...
### Java Filter 打印请求返回参数详解 #### 一、背景与目的 在Web开发过程中,经常需要在请求处理流程中增加一些通用的功能,比如日志记录、性能监控、安全控制等。Java Servlet规范提供了Filter机制来实现这些...
Java编写的HTTP代理是一种软件应用,它允许用户通过Java程序作为中介来访问互联网,从而实现对HTTP请求的转发。这种代理服务器通常用于多种用途,包括网络匿名性、内容过滤、性能优化以及网络测试等。在Java中实现...
首先,它的API设计较为原始,处理HTTP请求的细节较多,如设置请求头、处理重定向、管理cookies等,都需要程序员手动处理。其次,它不支持异步请求,如果需要并发发送多个请求,代码会变得复杂。 相比之下,Apache ...
在开发过程中,开发者可能使用各种编程语言(如Java、Python、JavaScript等)和库(如Apache HttpClient、requests、jQuery等)来构造和发送XML格式的HTTP请求。这些工具通常提供了方便的方法来构建XML文档、设置...
### dxServlet.java 处理 HTTP Post 的表单请求 XML #### 概述 在 Java 开发中,处理 HTTP 请求是一项常见的任务。对于基于 Web 的应用而言,能够有效地解析和响应 HTTP POST 请求中的 XML 数据至关重要。本文将...
在本项目中,"Java模拟在线聊天室"是一个基于Java编程语言实现的简易聊天应用程序,旨在提供一个模拟的网络环境,使用户能够进行实时的文字交流。这个程序通常涉及到多线程、网络编程以及用户界面设计等多个Java核心...
- `forward`:请求转发,发生在服务器端,请求被转发到同一个Web应用的另一个资源,保留原始请求的所有信息。客户端浏览器的URL不会改变,因为只有一个请求和一个响应。 - `redirect`:重定向,发生在客户端,...
以上就是Java中模拟Interceptor过程的基本实现。通过这种方式,我们可以灵活地在方法调用前、后插入各种逻辑,而无需修改原始方法的代码。这种设计模式在大型项目中尤其有用,因为它提供了很好的解耦和扩展性。通过...
4. **解密请求体**: 使用相应的解密算法(如AES)解密`encryptedStr`,得到原始数据。 5. **数据处理**: 解密后的数据通常是一个JSON字符串,可以转换为Java对象,然后根据业务逻辑调用其他服务并返回响应。 通过...
- 使用Python或其他编程语言编写HTTP请求库,如requests库,来模拟用户登录。 - 处理HTTP 401响应,生成Digest认证所需的请求头。 - 可能涉及解析服务器返回的nonce值,以及其他必要的认证参数如realm、qop等。 - ...
【JAVA模拟记事本(Jbuilder)】是一款使用JAVA编程语言,并通过Jbuilder开发环境构建的简易文本编辑器。它具备日常记事本的基本功能,旨在提供一个轻量级的文本处理工具,便于用户进行文字编辑、存储和管理。在这款...
Java 游戏模拟器是一种利用Java编程语言实现的软件,它可以模拟各种游戏平台或系统,使得用户可以在不拥有原生游戏设备的情况下运行游戏。在Java技术的支持下,这种模拟器通常具有跨平台的特性,可以在Windows、Mac ...
本项目涉及的是在Java环境下,模拟实现HTTP 1.0版本的FTP功能,并结合多线程技术来提高效率。以下是这个项目的核心知识点: 1. **HTTP 1.0**: HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从...