如果登录成功的话,我访问百度首页应该在右上角出现用户面板private void login() {
String surl = "https://passport.baidu.com/?login&tpl=mn";
// String surl = "http://localhost:8080/jkl.html";
URL url = null;
try {
url = new URL(surl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection connection = null;
try {
connection = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
connection.setDoOutput(true);
try {
connection.setRequestProperty("Content-type", "text/html");
connection.setRequestMethod("POST");
connection.setRequestProperty("User-Agent",
"Mozilla/5.0 (compatible; MSIE 6.0; Windows NT)");
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
} catch (ProtocolException e1) {
e1.printStackTrace();
}
OutputStreamWriter out = null;
try {
out = new OutputStreamWriter(connection.getOutputStream(), "gb2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
String params = "tpl_ok=&" + "next_target=&" + "tpl=mn&"
+ "skip_ok=&" + "aid=&" + "need_pay=&" + "need_coin=&"
+ "pay_method=&" + "u=http://www.baidu.com/&"
+ "return_method=get&" + "more_param=&" + "return_type=&"
+ "psp_tt=0&" + "safeflg=0&"
+ "isphone=tpl&" + "username=xxx&"
+ "password=xxx&" + "verifycode=&" + "mem_pass=";
out.write(params);
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cookies = connection.getHeaderField("Set-Cookie");
}private void view(String surl) throws Exception {
URL url = new URL(surl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
if (!"".equals(cookies)) {
conn.setRequestProperty("Cookie", cookies);
}
conn.connect();
InputStreamReader in = new InputStreamReader(conn.getInputStream(),
"gb2312");
int i = 0;
while ((i = in.read()) != -1) {
System.out.print((char) i);
}
System.out.println();
}
上面代码都是网上找来后修改的,在其他网站是可以登录的,是不是百度用了https的原因呢?

解决方案 »

  1.   


    想上面那样模拟登录, 其他网站可以成功,为什么百度不行, 是不是因为百度用了https?
      

  2.   

    登录其实是成功的,主要是获取不到 cookie
    cookies = connection.getHeaderField("Set-Cookie");手动登录后用firebug查看cookie:
    BAIDUID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:FG=1; USERID=8311xx6823dfxxx7d31ca819ce; BDUT=40q479D54991718AA5C8211BE0FB91856534135f1cbc3ab0; PTOKEN=8c4b525xxx49cf6467a0af7b921a0d0c; STOKEN=3f4845351ad537bdxxxx2de26d9abce6; BDSFRCVID=K0u_JgCUnk7zXHlTjR_AMDve0MQIyWJ43J; H_BDCLCKID_SF=tRIt_IP5txxxxP0k-tcH244HqxbXqMPjbGOZ0hOGaJkbJxnShhO80l4FXtOqK6OuLm58-hF2thF0HPonHj-WDxx3J; BDUSS=khSdC00ZxxxZW4yMnVZU3F1NERjOXZSVDN5xxxtOXVvRn5NMnVxM3ViZmd5WnhQQVFBQUFBJCQAAAAAAAAAAAoqxit0OQABNDIwOTEwMTc2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgusRwAAAAAOC6xHAAAAAAuWxxxxAAAAAxMC44MS41MOA8dU~gPHVPe然后赋给cookie,这样就可以了