java模拟百度登录_【已解决】Java中模拟登陆百度期间通过HttpClient无法获得所希望的返回的html和cookie...

这篇博客详细记录了使用Java模拟登录百度时遇到的问题,包括无法获取期望的HTML和cookie。通过分析代码和与C#代码的对比,发现了在POST数据中忘记传入用户名和密码的错误。修复此问题后,成功模拟登录并获取了所需cookie。总结了模拟登录失败的原因和解决办法。
摘要由CSDN通过智能技术生成

【背景】

折腾:

期间,用如下代码:

/** Get response from url */

public HttpResponse getUrlResponse(

String url,

List headerDict,

List postDict,

int timeout

)

{

// init

HttpResponse response = null;

HttpUriRequest request = null;

DefaultHttpClient httpClient = new DefaultHttpClient();

//HttpParams headerParams = new HttpParams();

//HttpParams headerParams = new DefaultedHttpParams(headerParams, headerParams);

//HttpParams headerParams = new BasicHttpParams();

BasicHttpParams headerParams = new BasicHttpParams();

//HttpConnectionParams.

//default enable auto redirect

headerParams.setParameter(CoreProtocolPNames.USER_AGENT, gUserAgent);

headerParams.setParameter(ClientPNames.HANDLE_REDIRECTS, Boolean.TRUE);

if(postDict != null)

{

HttpPost postReq = new HttpPost(url);

try{

HttpEntity postBodyEnt = new UrlEncodedFormEntity(postDict);

postReq.setEntity(postBodyEnt);

}

catch(Exception e){

e.printStackTrace();

}

request = postReq;

}

else

{

HttpGet getReq = new HttpGet(url);

request = getReq;

}

if(headerParams != null)

{

//HttpProtocolParams.setUserAgent(headerParams, gUserAgent);

//headerParams.setHeader(HttpMethodParams.USER_AGENT, gUserAgent);

request.setParams(headerParams);

}

//request.setHeader("User-Agent", gUserAgent);

try{

HttpContext localContext = new BasicHttpContext();

localContext.setAttribute(ClientContext.COOKIE_STORE, gCurCookieStore);

response = httpClient.execute(request, localContext);

//response HeaderGroup value:

//[Via: 1.1 SC-SZ-06, Connection: Keep-Alive, Proxy-Connection: Keep-Alive, Content-Length: 11006, Expires: Tue, 17 Sep 2013 01:43:44 GMT, Date: Tue, 17 Sep 2013 01:43:44 GMT, Content-Type: text/html;charset=utf-8, Server: BWS/1.0, Cache-Control: private, BDPAGETYPE: 1, BDUSERID: 0, BDQID: 0xaaa869770d8d5dcd, Set-Cookie: BDSVRTM=2; path=/, Set-Cookie: H_PS_PSSID=3361_2777_1465_2975_3109; path=/; domain=.baidu.com, Set-Cookie: BAIDUID=C0C2EAA4B1805EF21EE097E2C6A3D448:FG=1; expires=Tue, 17-Sep-43 01:43:44 GMT; path=/; domain=.baidu.com, P3P: CP=" OTI DSP COR IVA OUR IND COM "]

//gCurCookieStore (formatted ouput) value:

/*{

[version: 0][name: BAIDUID][value: C0C2EAA4B1805EF21EE097E2C6A3D448:FG=1][domain: .baidu.com][path: /][expiry: Thu Sep 17 09:43:44 CST 2043]=java.lang.Object@55ba1c2b,

[version: 0][name: BDSVRTM][value: 2][domain: www.baidu.com][path: /][expiry: null]=java.lang.Object@55ba1c2b,

[version: 0][name: H_PS_PSSID][value: 3361_2777_1465_2975_3109][domain: .baidu.com][path: /][expiry: null]=java.lang.Object@55ba1c2b

}*/

} catch (ClientProtocolException cpe) {

// TODO Auto-generated catch block

cpe.printStackTrace();

} catch (IOException ioe) {

// TODO Auto-generated catch block

ioe.printStackTrace();

}

return response;

}

和:

/**

* [File]

* EmulateLoginBaidu.java

*

* [Function]

* Use Java code to emulate login baidu

*

* 【教程】模拟登陆百度之Java代码版

* http://www.crifan.com/emulate_login_baidu_use_java_code

*

* [Version]

* v1.0

* 2013-09-16

*

* [Note]

* 1. need add apache http lib:

* 【已解决】Eclipse的java代码出错:The import org.apache cannot be resolved

* http://www.crifan.com/java_eclipse_the_import_org_apache_cannot_be_resolved/

* 2.need crifanLib.java

* http://code.google.com/p/crifanlib/source/browse/trunk/java/crifanLib.java

*

* [History]

* [v1.0]

* 1. initial version.

*/

import java.io.IOException;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import java.util.Hashtable;

import java.util.List;

import java.util.Map;

import java.util.Scanner;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import org.apache.http.HttpResponse;

import org.apache.http.NameValuePair;

import org.apache.http.cookie.Cookie;

import org.apache.http.impl.cookie.BasicClientCookie;

import org.apache.http.impl.cookie.BasicClientCookie2;

import org.apache.http.message.BasicNameValuePair;

//import crifanLib;

/**

* @author CLi

*

*/

public class EmulateLoginBaidu {

static crifanLib crl;

/**

* @param args

*/

public static void main(String[] args) {

crl = new crifanLib();

// TODO Auto-generated method stub

EmulateLoginBaiduUsingJava();

}

// emulate login baidu using java code

public static void EmulateLoginBaiduUsingJava()

{

boolean bLoginBaiduOk = false;

List curCookieList;

//step1: login baidu, got cookie BAIDUID

String strTokenValue = "";

boolean bGotCookieBaiduid = false;

String strBaiduUrl = "http://www.baidu.com/";

HttpResponse baiduResp = crl.getUrlResponse(strBaiduUrl);

List cookieList =crl.getCurCookieStore().getCookies();

crl.dbgPrintCookies(cookieList, strBaiduUrl);

for(Cookie ck : cookieList)

{

String cookieName = ck.getName();

if(cookieName.equals("BAIDUID"))

{

bGotCookieBaiduid = true;

}

}

if (bGotCookieBaiduid)

{

System.out.println("正确:已找到cookie BAIDUID");

}

else

{

System.out.println("错误:没有找到cookie BAIDUID !");

}

//step2: login, pass paras, extract resp cookie

boolean bExtractTokenValueOK = false;

if(bGotCookieBaiduid)

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值