`

HttpClient模仿浏览器cookie请求需要登陆验证的页面

    博客分类:
  • Java
阅读更多
1、淘宝网兑换抵价券页面地址:
http://auction1.taobao.com/auction/coupon/validate_exchange.htm
(该页面需要先登陆淘宝网)

2、具体请求的Action:
http://auction1.taobao.com/auction/coupon/validate_exchange.htm?action=coupon%2Fapply_exchange_action&event_submit_do_winkey_apply=anything

用Get方法也可以,把form参数加到地址栏:

http://auction1.taobao.com/auction/coupon/validate_exchange.htm?action=coupon%2Fapply_exchange_action&event_submit_do_winkey_apply=anything&encash=winkey&winkey=TLD35A0P84

请求上面地址也需要登陆。

3、分析浏览器cookie,打开IE,跟踪页面cookie:



4、具体代码:

import java.io.IOException;

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.methods.GetMethod;

public class GetTaobao {

	public static void main(String[] args) {
		HttpClient httpClient = new HttpClient();
		String url = "http://auction1.taobao.com/auction/coupon/validate_exchange.htm?action=coupon%2Fapply_exchange_action&event_submit_do_winkey_apply=anything&encash=winkey&winkey=TLD35A0P84";

		GetMethod getMethod = new GetMethod(url);
		
		getMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		//下面一行需要注释掉,不然返回数据是gzip压缩后的乱码
		//getMethod.setRequestHeader("Accept-Encoding","gzip, deflate");
		getMethod.setRequestHeader("Accept-Language","zh-cn");
		getMethod.setRequestHeader("Connection","Keep-Alive");
		getMethod.setRequestHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)");
		getMethod.setRequestHeader("Host","auction1.taobao.com");
		getMethod.setRequestHeader("Cookie","ab=24; ssllogin=; tracknick=honda418; tg=0; _cc_=W5iHLLyFfA%3D%3D; _ad_=KeUKmAWU8kRK0uEGyGeDILt0rx2LXNjnS1iKbArmFo7sRGntneSqx2S39sCoBdou3DWjPzYi; wd=575ec8929dadafeffe02836090e282cd_0db2%2C1447eee8ade9296be6b7da258425dc4e_0db2%2C37b2290e0bd639d66dd4d8af77168ec3_0db1%2C1182a6b21a75703ac5ef344fa3d649e4_0db1%2C3fcce38e4d38df27babbead5c969ce9c_0db2%2Ca0e6427ba253effec0676730d5c77f0a_0db1; ystat_bc_989278=135544014411299247; ystat_bc_1031985=2974207998754953203; ystat_bc_1054537=27069353203149412100; ystat_bc_1056444=14372573111871880121; BX=973hnh14uo4in&b=3&s=v6; cna=6OFMAWOF+lQBAeMdAHmd16M7; ystat_bc_1067067=22398982153378132103; ystat_bc_1087728=8548896732772299499; ystat_bc_1087723=19117999521097358007; ystat_bc_922867=24874028163364390332; batchbuy=; t=437df97fd8c3cd5d80156b001c75330d; cookie2=4aef8e6dedb1d0d1a5f2c81212a99d11; uc1=_yb_=false&_msg_=0&_msg_v=true&cookie21=UtASsssmeWzt&cookie14=UoM%2F0usBU%2BxScw%3D%3D&cookie15=VFC%2FuZ9ayeYq2g%3D%3D&cookie16=URm48syIJ1yk0MX2J7mAAEhTuw%3D%3D&existShop=false&enabledWuiShop=false; _wwmsg_=0%2C0; lastgetwwmsg=MTI0NDU5ODQ2Mg%3D%3D; cookie1=U%2BJ5GUTahHSOO5bIn9bGaA1ayHQNLzyfpduePMzm1rM%3D; _sv_=0; cookie17=UoM%2BH5rp6SQ%3D; _nk_=honda418; _l_g_=Ug%3D%3D");

		try {
			int statusCode = httpClient.executeMethod(getMethod);
			System.out.println(statusCode);
			// 301或者302
			if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY
					|| statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
				Header locationHeader = getMethod.getResponseHeader("location");
				String location = null;
				if (locationHeader != null) {
					location = locationHeader.getValue();
					System.out.println("The page was redirected to:" + location);
				} else {
					System.err.println("Location field value is null.");
				}
				return;
			}
			if (statusCode != HttpStatus.SC_OK) {
				System.err.println("Method failed: " + getMethod.getStatusLine());
			}			
			byte[] responseBody = getMethod.getResponseBody();
			System.out.println(new String(responseBody));
		} catch (HttpException e) {
			System.out.println("Please check your provided http address!");
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			getMethod.releaseConnection();
		}
	}
}
  • 大小: 28.9 KB
2
0
分享到:
评论
1 楼 没有这个名字 2013-09-18  
博主,可以注释一下吗?

相关推荐

    httpclient

    2. **登录和cookie管理**:处理登录过程,保存和发送cookie,以便于访问需要登录的页面。 3. **模拟浏览器行为**:设置User-Agent,处理JavaScript,支持cookies,模仿真实用户的行为。 4. **反反爬策略**:应对...

    httpclient 模拟登陆代码和jar包

    10. **再次请求**:登录成功后,你可以使用相同的`HttpClient`实例发送后续的请求,由于保留了Cookies,服务器应该会认为这些请求来自已登录的用户。 以上步骤只是一个基础的示例,实际使用时可能需要根据目标网站...

    爬虫模拟登陆、爬虫模拟登陆

    模拟登录的核心是模仿浏览器发送登录请求的过程,通常涉及以下几个步骤: 1. 获取登录页面:首先,我们需要发送一个GET请求到登录页面,获取登录表单的HTML内容,从中解析出用户名和密码输入框的名称或ID。 2. 构造...

    java网络爬虫模拟登入抓取数据

    4. **设置Cookie和Header**:根据登录页面的响应,设置Cookie和必要的Header,比如`User-Agent`,以模仿浏览器行为。 5. **发送登录请求**:执行POST请求,模拟用户提交登录表单。 6. **处理登录响应**:接收...

    java模拟淘宝登录源码

    2. 添加请求头,包括User-Agent、Cookie等,以模仿浏览器行为。 3. 设置请求体,包含登录所需的用户名和密码,通常使用POST参数形式。 4. 发送请求并接收响应,处理返回的HTML内容,提取session或cookie信息,以保持...

    腾讯企业邮箱模拟登录C#,WinForm(请下载这个)

    注意,为了模仿浏览器的行为,可能还需要设置cookies和headers。 5. **处理响应**:接收服务器的响应,检查是否登录成功。成功的话,可能会获得一个会话cookie,用于后续的API请求。 在提供的"QQExmailLogin"文件...

    C# 2012最新QQ模拟网页登录 免验证码 源码

    在模拟登录过程中,C#需要利用HttpClient类或者WebClient类来发送POST请求,模仿用户填写用户名和密码并提交表单的行为。这通常涉及到处理URL编码、设置请求头(如User-Agent)以及构造正确的请求体。 验证码的目的...

    C#开发的功能强大的网络爬虫

    3. **请求头模拟**:模仿浏览器发送请求,防止被识别为机器人。 4. **Cookie管理**:处理登录验证或会话保持。 5. **延迟和重试策略**:防止对目标网站造成过大压力,同时确保数据获取的成功率。 6. **动态内容抓取*...

    Java编写的模拟网络爬虫的小程序

    - **User-Agent**:模仿浏览器发送请求,设置合理的User-Agent字符串避免被服务器识别为爬虫。 - **延迟和间隔**:设置请求之间的延迟,避免过于频繁的请求引起服务器反感。 - **代理IP**:使用代理IP池,减少...

Global site tag (gtag.js) - Google Analytics