转自:http://winhonourxzg.iteye.com/blog/461219
http://daimajishu.iteye.com/blog/961785
请求模拟 package org.zlex.commons.net; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Map; import java.util.Properties; /** * 网络工具 * * @author 梁栋 * @version 1.0 * @since 1.0 */ public abstract class NetUtils { public static final String CHARACTER_ENCODING = "UTF-8"; public static final String PATH_SIGN = "/"; public static final String METHOD_POST = "POST"; public static final String METHOD_GET = "GET"; public static final String CONTENT_TYPE = "Content-Type"; /** * 以POST方式向指定地址发送数据包请求,并取得返回的数据包 * * @param urlString * @param requestData * @return 返回数据包 * @throws Exception */ public static byte[] requestPost(String urlString, byte[] requestData) throws Exception { Properties requestProperties = new Properties(); requestProperties.setProperty(CONTENT_TYPE, "application/octet-stream; charset=utf-8"); return requestPost(urlString, requestData, requestProperties); } /** * 以POST方式向指定地址发送数据包请求,并取得返回的数据包 * * @param urlString * @param requestData * @param requestProperties * @return 返回数据包 * @throws Exception */ public static byte[] requestPost(String urlString, byte[] requestData, Properties requestProperties) throws Exception { byte[] responseData = null; HttpURLConnection con = null; try { URL url = new URL(urlString); con = (HttpURLConnection) url.openConnection(); if ((requestProperties != null) && (requestProperties.size() > 0)) { for (Map.Entry<Object, Object> entry : requestProperties .entrySet()) { String key = String.valueOf(entry.getKey()); String value = String.valueOf(entry.getValue()); con.setRequestProperty(key, value); } } con.setRequestMethod(METHOD_POST); // 置为POST方法 con.setDoInput(true); // 开启输入流 con.setDoOutput(true); // 开启输出流 // 如果请求数据不为空,输出该数据。 if (requestData != null) { DataOutputStream dos = new DataOutputStream(con .getOutputStream()); dos.write(requestData); dos.flush(); dos.close(); } int length = con.getContentLength(); // 如果回复消息长度不为-1,读取该消息。 if (length != -1) { DataInputStream dis = new DataInputStream(con.getInputStream()); responseData = new byte[length]; dis.readFully(responseData); dis.close(); } } catch (Exception e) { throw e; } finally { if (con != null) { con.disconnect(); con = null; } } return responseData; } /** * 以POST方式向指定地址提交表单<br> * arg0=urlencode(value0)&arg1=urlencode(value1) * * @param urlString * @param formProperties * @return 返回数据包 * @throws Exception */ public static byte[] requestPostForm(String urlString, Properties formProperties) throws Exception { return requestPostForm(urlString, formProperties, null); } /** * 以POST方式向指定地址提交表单<br> * arg0=urlencode(value0)&arg1=urlencode(value1) * * @param urlString * @param formProperties * @param requestProperties * @return 返回数据包 * @throws Exception */ public static byte[] requestPostForm(String urlString, Properties formProperties, Properties requestProperties) throws Exception { requestProperties.setProperty(HttpUtils.CONTENT_TYPE, "application/x-www-form-urlencoded"); StringBuilder sb = new StringBuilder(); if ((formProperties != null) && (formProperties.size() > 0)) { for (Map.Entry<Object, Object> entry : formProperties.entrySet()) { String key = String.valueOf(entry.getKey()); String value = String.valueOf(entry.getValue()); sb.append(key); sb.append("="); sb.append(encode(value)); sb.append("&"); } } String str = sb.toString(); str = str.substring(0, (str.length() - 1)); // 截掉末尾字符& return requestPost(urlString, str.getBytes(CHARACTER_ENCODING), requestProperties); } /** * url解码 * * @param str * @return 解码后的字符串,当异常时返回原始字符串。 */ public static String decode(String url) { try { return URLDecoder.decode(url, CHARACTER_ENCODING); } catch (UnsupportedEncodingException ex) { return url; } } /** * url编码 * * @param str * @return 编码后的字符串,当异常时返回原始字符串。 */ public static String encode(String url) { try { return URLEncoder.encode(url, CHARACTER_ENCODING); } catch (UnsupportedEncodingException ex) { return url; } } } /** * 2008-12-26 */ package org.zlex.commons.net; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Map; import java.util.Properties; /** * 网络工具 * * @author 梁栋 * @version 1.0 * @since 1.0 */ public abstract class NetUtils { public static final String CHARACTER_ENCODING = "UTF-8"; public static final String PATH_SIGN = "/"; public static final String METHOD_POST = "POST"; public static final String METHOD_GET = "GET"; public static final String CONTENT_TYPE = "Content-Type"; /** * 以POST方式向指定地址发送数据包请求,并取得返回的数据包 * * @param urlString * @param requestData * @return 返回数据包 * @throws Exception */ public static byte[] requestPost(String urlString, byte[] requestData) throws Exception { Properties requestProperties = new Properties(); requestProperties.setProperty(CONTENT_TYPE, "application/octet-stream; charset=utf-8"); return requestPost(urlString, requestData, requestProperties); } /** * 以POST方式向指定地址发送数据包请求,并取得返回的数据包 * * @param urlString * @param requestData * @param requestProperties * @return 返回数据包 * @throws Exception */ public static byte[] requestPost(String urlString, byte[] requestData, Properties requestProperties) throws Exception { byte[] responseData = null; HttpURLConnection con = null; try { URL url = new URL(urlString); con = (HttpURLConnection) url.openConnection(); if ((requestProperties != null) && (requestProperties.size() > 0)) { for (Map.Entry<Object, Object> entry : requestProperties .entrySet()) { String key = String.valueOf(entry.getKey()); String value = String.valueOf(entry.getValue()); con.setRequestProperty(key, value); } } con.setRequestMethod(METHOD_POST); // 置为POST方法 con.setDoInput(true); // 开启输入流 con.setDoOutput(true); // 开启输出流 // 如果请求数据不为空,输出该数据。 if (requestData != null) { DataOutputStream dos = new DataOutputStream(con .getOutputStream()); dos.write(requestData); dos.flush(); dos.close(); } int length = con.getContentLength(); // 如果回复消息长度不为-1,读取该消息。 if (length != -1) { DataInputStream dis = new DataInputStream(con.getInputStream()); responseData = new byte[length]; dis.readFully(responseData); dis.close(); } } catch (Exception e) { throw e; } finally { if (con != null) { con.disconnect(); con = null; } } return responseData; } /** * 以POST方式向指定地址提交表单<br> * arg0=urlencode(value0)&arg1=urlencode(value1) * * @param urlString * @param formProperties * @return 返回数据包 * @throws Exception */ public static byte[] requestPostForm(String urlString, Properties formProperties) throws Exception { return requestPostForm(urlString, formProperties, null); } /** * 以POST方式向指定地址提交表单<br> * arg0=urlencode(value0)&arg1=urlencode(value1) * * @param urlString * @param formProperties * @param requestProperties * @return 返回数据包 * @throws Exception */ public static byte[] requestPostForm(String urlString, Properties formProperties, Properties requestProperties) throws Exception { requestProperties.setProperty(HttpUtils.CONTENT_TYPE, "application/x-www-form-urlencoded"); StringBuilder sb = new StringBuilder(); if ((formProperties != null) && (formProperties.size() > 0)) { for (Map.Entry<Object, Object> entry : formProperties.entrySet()) { String key = String.valueOf(entry.getKey()); String value = String.valueOf(entry.getValue()); sb.append(key); sb.append("="); sb.append(encode(value)); sb.append("&"); } } String str = sb.toString(); str = str.substring(0, (str.length() - 1)); // 截掉末尾字符& return requestPost(urlString, str.getBytes(CHARACTER_ENCODING), requestProperties); } /** * url解码 * * @param str * @return 解码后的字符串,当异常时返回原始字符串。 */ public static String decode(String url) { try { return URLDecoder.decode(url, CHARACTER_ENCODING); } catch (UnsupportedEncodingException ex) { return url; } } /** * url编码 * * @param str * @return 编码后的字符串,当异常时返回原始字符串。 */ public static String encode(String url) { try { return URLEncoder.encode(url, CHARACTER_ENCODING); } catch (UnsupportedEncodingException ex) { return url; } } } 注意上述requestPostForm()方法,是用来提交表单的。 测试用例 Java代码 /** * 2009-8-21 */ package org.zlex.commons.net; import static org.junit.Assert.*; import java.util.Properties; import org.junit.Test; /** * 网络工具测试 * * @author 梁栋 * @version 1.0 * @since 1.0 */ public class NetUtilsTest { /** * Test method for * {@link org.zlex.commons.net.NetUtils#requestPost(java.lang.String, byte[])} * . */ @Test public final void testRequestPostStringByteArray() throws Exception { Properties requestProperties = new Properties(); // 模拟浏览器信息 requestProperties .put( "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; .NET CLR 1.1.4322)"); byte[] b = NetUtils.requestPost("http://localhost:8080/zlex/post.do", "XML".getBytes()); System.err.println(new String(b, "utf-8")); } /** * Test method for * {@link org.zlex.commons.net.NetUtils#requestPostForm(java.lang.String, java.util.Properties)} * . */ @Test public final void testRequestPostForm() throws Exception { Properties formProperties = new Properties(); formProperties.put("j_username", "Admin"); formProperties.put("j_password", "manage"); byte[] b = NetUtils.requestPostForm( "http://localhost:8080/zlex/j_spring_security_check", formProperties); System.err.println(new String(b, "utf-8")); } }
+
+
+
=
+
+
+
相关推荐
本篇将详细探讨Java处理文件上传的底层实现,以及如何使用Java模拟POST协议来实现文件上传。 首先,我们需要理解文件上传的基本原理。在HTTP协议中,文件上传通常通过POST请求进行。当用户在表单中选择文件并提交时...
在提供的代码中,我们看到一个名为`Http`的类,它封装了HTTP的GET、HEAD和POST方法,这三种方法是HTTP协议中最基本的请求类型。 1. **GET方法**: GET方法用于请求获取指定URL(统一资源定位符)的资源。在`GET`...
1. **Java爬虫基础**:Java爬虫的核心是利用HTTP或HTTPS协议与服务器进行交互,通过发送GET或POST请求获取网页内容。Java的HttpURLConnection或者Apache HttpClient库可以实现这一功能。此外,Jsoup库则用于解析HTML...
通常使用HTTP的GET、POST、PUT、DELETE等方法操作资源。Java框架如Spring Boot提供了便捷的方式来创建RESTful服务,而JavaScript通过XMLHttpRequest或fetch API进行HTTP请求。 6. Java Applet和Web Start 虽然现在...
- **处理HTTP请求**: 如何通过Servlet处理GET、POST等HTTP请求。 **LESSON27: JavaServer Pages** - **JSP简介**: JSP是基于Java技术的动态网页技术。 - **JSP页面元素**: 脚本、指令、动作等JSP页面的基本构成元素...
总结起来,模拟登录验证码涉及的知识点包括:HTTP请求(GET和POST)、HTML解析(Jsoup库)、验证码识别(OCR技术如Tesseract)以及网络爬虫策略。掌握这些技术,能帮助我们更有效地实现自动化登录和数据抓取任务。
2. REST(Representational State Transfer):一种轻量级的Web服务架构风格,基于HTTP方法(GET、POST、PUT、DELETE等)操作资源。 二、Java中的Web服务框架 1. JAX-WS(Java API for XML Web Services):用于...
- HTTP协议:GET、POST请求,状态码,HTTP头等。 - WebSocket:了解其与HTTP的区别,实现客户端和服务器的双向通信。 12. **Java 8及以上新特性**: - Lambda表达式、函数式接口、Stream API的使用。 - Date-...
### Spring Boot中使用Java实现文件批量下载与压缩功能 #### 一、背景介绍 在Web应用开发中,经常需要提供给用户批量下载的功能,尤其是在文件管理或者文档分享等场景下。传统的做法是一次只下载一个文件,这不仅...
本文将深入探讨如何使用Java来监听文件夹变化,并模拟POST提交文件流同步到服务器。这些技术在数据备份、实时更新、协作编辑等场景中有着广泛的应用。 首先,让我们讨论如何在Java中监听文件夹变化。Java提供了一个...
`Postman-win64-7.6.0-Setup.exe`是Postman的Windows 64位版本,安装后,开发者可以轻松地模拟各种HTTP请求(GET、POST、PUT等),查看响应数据,进行断点调试,甚至创建自动化测试套件。 结合这三个工具,开发者...
但在Android中,由于没有直接的API支持,我们需要手动构造HTTP请求,模拟这种表单提交。 1. **构建HTTP请求头** - `Content-Type`: 需要设置为`multipart/form-data`,表示这是个包含文件的数据。 - `Boundary`: ...
3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。 3.调用HttpClient...
使用`Request`对象来设置URL、方法(GET、POST等)和其他请求属性,而`Call`对象则负责执行请求。 7. **自动gzip压缩**:OKHttp会自动检测服务器是否支持gzip压缩,并在可能的情况下启用它,减小了传输的数据量。 ...
5. **提交表单**:HTMLUnit可以模拟表单提交,包括POST和GET请求。 ```java HtmlForm form = page.getFormByName("myForm"); form.getInputByName("username").setValueAttribute("user"); form.getInputByName(...
这包括使用HTTP方法(GET、POST、PUT、DELETE等)来表示资源的操作,并通过URL定位资源。例如,`/recipes`可以表示所有食谱的集合,而`/recipes/{id}`则代表特定ID的食谱。 6. **Web层** Spring MVC是Spring框架的...
Webhook是一种实时的、基于事件的推送机制,不同于传统的HTTP请求(如GET和POST),Webhook允许服务器在特定事件发生时主动向预先注册的URL发送通知。在Spring框架中,我们可以利用Spring WebFlux或Spring MVC来构建...