【背景】
折腾:
期间,用如下代码:
/** 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)
{