`
fantaxy025025
  • 浏览: 1349069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

java-http-请求-get-post-stream-模拟

 
阅读更多

转自: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协议实现文件上传

    本篇将详细探讨Java处理文件上传的底层实现,以及如何使用Java模拟POST协议来实现文件上传。 首先,我们需要理解文件上传的基本原理。在HTTP协议中,文件上传通常通过POST请求进行。当用户在表单中选择文件并提交时...

    使用java控制HTTP协议客户端应用.pdf

    在提供的代码中,我们看到一个名为`Http`的类,它封装了HTTP的GET、HEAD和POST方法,这三种方法是HTTP协议中最基本的请求类型。 1. **GET方法**: GET方法用于请求获取指定URL(统一资源定位符)的资源。在`GET`...

    JAVA_采集-爬虫抓取原代码

    1. **Java爬虫基础**:Java爬虫的核心是利用HTTP或HTTPS协议与服务器进行交互,通过发送GET或POST请求获取网页内容。Java的HttpURLConnection或者Apache HttpClient库可以实现这一功能。此外,Jsoup库则用于解析HTML...

    java+js交互Demo

    通常使用HTTP的GET、POST、PUT、DELETE等方法操作资源。Java框架如Spring Boot提供了便捷的方式来创建RESTful服务,而JavaScript通过XMLHttpRequest或fetch API进行HTTP请求。 6. Java Applet和Web Start 虽然现在...

    24小时掌握Java编程(英文)

    - **处理HTTP请求**: 如何通过Servlet处理GET、POST等HTTP请求。 **LESSON27: JavaServer Pages** - **JSP简介**: JSP是基于Java技术的动态网页技术。 - **JSP页面元素**: 脚本、指令、动作等JSP页面的基本构成元素...

    模拟登录验证码

    总结起来,模拟登录验证码涉及的知识点包括:HTTP请求(GET和POST)、HTML解析(Jsoup库)、验证码识别(OCR技术如Tesseract)以及网络爬虫策略。掌握这些技术,能帮助我们更有效地实现自动化登录和数据抓取任务。

    开启并请求web服务

    2. REST(Representational State Transfer):一种轻量级的Web服务架构风格,基于HTTP方法(GET、POST、PUT、DELETE等)操作资源。 二、Java中的Web服务框架 1. JAX-WS(Java API for XML Web Services):用于...

    Java面试及简历相关,java笔试和面试题

    - HTTP协议:GET、POST请求,状态码,HTTP头等。 - WebSocket:了解其与HTTP的区别,实现客户端和服务器的双向通信。 12. **Java 8及以上新特性**: - Lambda表达式、函数式接口、Stream API的使用。 - Date-...

    Spring Boot中使用Java实现文件批量下载与压缩功能

    ### Spring Boot中使用Java实现文件批量下载与压缩功能 #### 一、背景介绍 在Web应用开发中,经常需要提供给用户批量下载的功能,尤其是在文件管理或者文档分享等场景下。传统的做法是一次只下载一个文件,这不仅...

    file_sync.zip

    本文将深入探讨如何使用Java来监听文件夹变化,并模拟POST提交文件流同步到服务器。这些技术在数据备份、实时更新、协作编辑等场景中有着广泛的应用。 首先,让我们讨论如何在Java中监听文件夹变化。Java提供了一个...

    java8_redis_postman工具包.zip

    `Postman-win64-7.6.0-Setup.exe`是Postman的Windows 64位版本,安装后,开发者可以轻松地模拟各种HTTP请求(GET、POST、PUT等),查看响应数据,进行断点调试,甚至创建自动化测试套件。 结合这三个工具,开发者...

    Android实现表单上传文件

    但在Android中,由于没有直接的API支持,我们需要手动构造HTTP请求,模拟这种表单提交。 1. **构建HTTP请求头** - `Content-Type`: 需要设置为`multipart/form-data`,表示这是个包含文件的数据。 - `Boundary`: ...

    HttpClient以及获取页面内容应用

    3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。 3.调用HttpClient...

    OKHttp依赖包

    使用`Request`对象来设置URL、方法(GET、POST等)和其他请求属性,而`Call`对象则负责执行请求。 7. **自动gzip压缩**:OKHttp会自动检测服务器是否支持gzip压缩,并在可能的情况下启用它,减小了传输的数据量。 ...

    htmlunit爬虫技术jar包

    5. **提交表单**:HTMLUnit可以模拟表单提交,包括POST和GET请求。 ```java HtmlForm form = page.getFormByName("myForm"); form.getInputByName("username").setValueAttribute("user"); form.getInputByName(...

    spring5-mongo-recipe-app:Spring 5 MongoDB应用测试

    这包括使用HTTP方法(GET、POST、PUT、DELETE等)来表示资源的操作,并通过URL定位资源。例如,`/recipes`可以表示所有食谱的集合,而`/recipes/{id}`则代表特定ID的食谱。 6. **Web层** Spring MVC是Spring框架的...

    spring-webhook-sample

    Webhook是一种实时的、基于事件的推送机制,不同于传统的HTTP请求(如GET和POST),Webhook允许服务器在特定事件发生时主动向预先注册的URL发送通知。在Spring框架中,我们可以利用Spring WebFlux或Spring MVC来构建...

Global site tag (gtag.js) - Google Analytics