`
liangjian103
  • 浏览: 178369 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java模拟Post表单提交 302 302 HTTP1.0 HTTP1.1问题解决

阅读更多

最近遇到了302和301,还有HTTP1.0和HTTP1.1的问题。这一切的一切都来源于“我要用Java模拟一个Post表单提交”抓取商品是否存在。好了,不多说了,把我最终测试成功的代码呈上,与大家分享。

package com.lj.util;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;

/**
 * Java模拟Post提交
 * @author LiangJian
 * 2011-6-1 10:13:32
 */
public class PostHttp {
	
	/**
	 * Java模拟Post提交
	 * @param url 要提交到的位置
	 * @param data 例如:NameValuePair[] data = {new NameValuePair("key", "nike"),new NameValuePair("proClass", "")};
	 * @return 返回HTML代码
	 */
	public static String methodPost(String url,NameValuePair[] data){
		
		String response= "";//要返回的response信息
		HttpClient httpClient = new HttpClient();
		PostMethod postMethod = new PostMethod(url);
		// 将表单的值放入postMethod中
        postMethod.setRequestBody(data);
		// 执行postMethod
		int statusCode = 0;
		try {
			statusCode = httpClient.executeMethod(postMethod);
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		// HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发
		// 301或者302
		if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY
				|| statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
			// 从头中取出转向的地址
			Header locationHeader = postMethod.getResponseHeader("location");
			String location = null;
			if (locationHeader != null) {
				location = locationHeader.getValue();
				System.out.println("The page was redirected to:" + location);
				response= methodPost(location,data);//用跳转后的页面重新请求。
			} else {
				System.err.println("Location field value is null.");
			}
		} else {
			System.out.println(postMethod.getStatusLine());

			try {
				response= postMethod.getResponseBodyAsString();
			} catch (IOException e) {
				e.printStackTrace();
			}
			postMethod.releaseConnection();
		}
		return response;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		String url = "http://www.shopin.net/search.html";
		Map<String,String> m = new HashMap<String,String>();
		m.put("key", "nike");
		m.put("proClass", "");
		NameValuePair[] data = {new NameValuePair("key", "nike"),new NameValuePair("proClass", "")};
		String response= methodPost(url,data);
		System.out.println(response);
	}

}

 

其中需要的jar包:

1、 commons-httpclient-3.1-rc1.zip http://jakarta.apache.org/commons/httpclient/downloads.html

2、commons-codec-1.3.jar    http://jakarta.apache.org/site/downloads/downloads_commons-codec.cgi

3、commons-logging-api.jar   在tomcat5.5中的Tomcat 5.5\bin目录下或者    http://jakarta.apache.org/site/downloads/downloads_commons-logging.cgi

分享到:
评论

相关推荐

    HttpClient以及获取页面内容应用

    1.6.2Post提交表单(模拟表单提交) /** * post方式提交表单(模拟用户登录请求) */ public void postForm() { // 创建默认的httpClient实例. CloseableHttpClient httpclient = HttpClients.createDefault...

    计算机网络http

    POST方法常用于提交数据,请求参数在请求体中,可传输大量数据,如表单提交或文件上传。 多线程技术在此实验中至关重要,因为它可以提高并发性能。当多个客户端同时请求服务器时,服务器可以通过创建多个线程来处理...

    org.apache.http.client

    HttpClient支持多种HTTP协议版本,包括HTTP/1.0和HTTP/1.1,并且具有处理重定向、认证、缓存、代理、连接管理等高级特性。它还允许开发者创建复杂的HTTP请求,如POST、PUT、DELETE等,并能处理响应,包括解析和验证...

    httpClient4 教程

    1. 支持 HTTP/1.0 和 HTTP/1.1 协议。 2. 多种连接管理策略,如连接池和重用。 3. 支持各种认证机制,如基本认证、摘要认证等。 4. 支持 HTTP 方法,如 GET、POST、PUT、DELETE 等。 5. 高效的请求和响应处理,包括...

    httpClient4.1入门教程

    HttpClient4.1不仅支持HTTP 1.0和HTTP 1.1,还包含了对HTTPS协议的支持,这使得它在处理需要安全连接的应用场景中显得尤为有用。 HttpClient4.1的基本功能包括但不限于以下几点: **环境准备**: 在开始使用...

    面经 、校招 、秋招、 测试岗位、小白刷题

    - POST:提交数据,常用于表单提交或创建新资源。 - HEAD:类似GET,但只返回头部信息,不返回实体主体。 - PUT:更新已有资源。 - DELETE:删除资源。 - OPTIONS:询问服务器支持哪些HTTP方法。 - TRACE:...

    htmlunit 及其 依赖包

    这个版本的Xerces提供了对XML 1.0和1.1规范的支持,以及XML Schema和Namespaces的处理。 3. **httpclient-4.5.2.jar**:Apache HttpClient是一个用于执行HTTP请求的Java库。HTMLUnit使用HttpClient来处理网络通信,...

Global site tag (gtag.js) - Google Analytics