用新浪微博JAVA客户端登陆时会出现“校验代码不存在”,登不进去,怎么办啊!各位!帮帮忙!是“不存在”
可能是系统内部的问题。。建议你重新下一下软件。。这样可以保证客户端的安全~
如果觉得还不错、、请给悬赏分~谢谢
求真正有效的可以模拟登录新浪微博的java代码,后续可以用Jsoup进行抓取。急急!!登录成功马上给分!
package jsoupTest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
public class JsoupTest {
public static void main(String[] args) throws IOException {
MapString, String map = new HashMap();
//map.put请根据自己的微博cookie得到
Response res = Jsoup.connect(“别人的主页id”)
.cookies(map).method(Method.GET).execute();
String s = res.body();
System.out.println(s);
String[] ss = s.split(“scriptFM.view”);
int i = 0;
// pl_content_homeFeed
// pl.content.homeFeed.index
ListString list = new ArrayList();
for (String x : ss) {
//System.out.println(i++ + “======================================”);
//System.out.println(x.substring(0,
//x.length() 200 ? 200 : x.length()));
//System.out.println(“===========================================”);
if (x.contains(“\”html\”:\””)) {
String value = getHtml(x);
list.add(value);
System.out.println(value);
}
}
// content=ss[8].split(“\”html\”:\””)[1].replaceAll(“(\\\\t|\\\\n)”,
// “”).replaceAll(“\\\\\””, “\””).replaceAll(“\\\\/”, “/”);
// content=content.substring(0,
// content.length()=13?content.length():content.length()-13);
// System.out.println(Native2AsciiUtils.ascii2Native(content));
}
public static String getHtml(String s) {
String content = s.split(“\”html\”:\””)[1]
.replaceAll(“(\\\\t|\\\\n)”, “”).replaceAll(“\\\\\””, “\””)
.replaceAll(“\\\\/”, “/”);
content = content.substring(0,
content.length() = 13 ? content.length()
: content.length() – 13);
return Native2AsciiUtils.ascii2Native(content);
}
java web程序 用新浪微博第三方登录,直接跳转到回调页面了,没有看到授权页面
这种情况应该是用户已经授过权了吧,如果用户对你应用未授权,在登录后会自动进入授权页面,是否对应用授权,可以在应用-我的应用里看到是否有你的应用,如果有删除后,再登录你的应用就会进授权页
如何获取新浪微博的登录参数
1、用Chrome的开发者工具或者Firefox的Firebug来进行抓包
找到login.php文件,就可以看到此文件的一些请求参数,
Request URL:
Request Method:
POST
Status Code:
200 OK
Request Headersview source
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:
GBK,utf-8;q=0.7,*;q=0.3
Accept-Encoding:
gzip,deflate,sdch
Accept-Language:
zh-CN,zh;q=0.8
Cache-Control:
max-age=0
Connection:
keep-alive
Content-Length:
380
Content-Type:
application/x-www-form-urlencoded
Cookie:
Apache=00000073.8a4c255d.4fbcca08.3dec6e4b; SINAGLOBAL=00000073.8a51255d.4fbcca08.f60eaf69; U_TRS1=00000073.a032426f.4fbccf5b.de1e4686; U_TRS2=00000073.a044426f.4fbccf5b.84a48193; UOR=,,; ULV=1337773919392:1:1:1:00000073.8a4c255d.4fbcca08.3dec6e4b:; SGUP=0; _s_upa=2; vjuids=1c9c46cf8.137798a2e07.0.baab928e; vjlast=1337773928; __utma=269849203.1663258918.1337773929.1337773929.1337773929.1; __utmb=269849203.1.10.1337773929; __utmc=269849203; __utmz=269849203.1337773929.1.1.utmcsr=login.sina.com.cn|utmccn=(referral)|utmcmd=referral|utmcct=/crossdomain2.php; ULOGIN_IMG=fe55e24c15322ed8e655ce949078e67299d6
Host:
login.sina.com.cn
Origin:
Referer:
User-Agent:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19
Query String Parametersview decoded
client:
ssologin.js(v1.3.22)
Form Dataview decoded
entry:
gateway:
1
from:
savestate:
useticket:
1
vsnf:
1
ssosimplelogin:
1
su:
bmlfd2Vpd2VpJTQwMTYzLmNvbQ%3D%3D
service:
miniblog
servertime:
1337774007
nonce:
WSFYJG
pwencode:
wsse
sp:
1dd5068aa2fd9aee6cd7d756227780007d3a0592
encoding:
UTF-8
prelt:
980
url:
http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack
returntype:
META
Response Headersview source
Cache-Control:
no-cache
Connection:
close
Content-Encoding:
gzip
Content-Length:
414
Content-Type:
text/html
Date:
Wed, 23 May 2012 11:53:30 GMT
P3P:
CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”
Pragma:
no-cache
Server:
Apache
Set-Cookie:
SUE=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn, SUP=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn, ALF=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn, ALC=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=login.sina.com.cn, SUR=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn, SSOLoginState=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; domain=.sina.com.cn
Vary:
Accept-Encoding
via_host:
38.62
2、用httpclient4.x登录新浪微博源码(转)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
public class SinaLogin {
private final static HttpClient client = new DefaultHttpClient();
/**
* 抓取网页
*
* @param url
* @throws IOException
*/
static String get(String url) throws IOException {
HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);
System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
String result = dump(entity);
get.abort();
return result;
}
/**
* 执行登录过程
*
* @param user
* @param pwd
* @param debug
* @throws IOException
*/
static void login(String user, String pwd) throws IOException {
HttpPost post = new HttpPost(
“”);
post.setHeader(“User-Agent”,
“Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0”);
post.setHeader(“Referer”, “”);
post.setHeader(“Content-Type”, “application/x-www-form-urlencoded”);
// 登录表单的信息
ListNameValuePair qparams = new ArrayListNameValuePair();
qparams.add(new BasicNameValuePair(“entry”, “miniblog”));
qparams.add(new BasicNameValuePair(“gateway”, “1”));
qparams.add(new BasicNameValuePair(“from”, “”));
qparams.add(new BasicNameValuePair(“savestate”, “0”));
qparams.add(new BasicNameValuePair(“useticket”, “1”));
qparams.add(new BasicNameValuePair(“ssosimplelogin”, “1”));
qparams.add(new BasicNameValuePair(“service”, “miniblog”));
// servertime=1309164392
// nonce=PJZCHM
// qparams.add(new BasicNameValuePair(“pwencode”, “wsse”));
qparams.add(new BasicNameValuePair(“encoding”, “utf-8”));
qparams.add(new BasicNameValuePair(
“url”,
“;callback=parent.sinaSSOController.feedBackUrlCallBack”));
qparams.add(new BasicNameValuePair(“returntype”, “META”));
qparams.add(new BasicNameValuePair(“username”, user));
qparams.add(new BasicNameValuePair(“password”, pwd));
UrlEncodedFormEntity params = new UrlEncodedFormEntity(qparams, “UTF-8”);
post.setEntity(params);
// Execute the request
HttpResponse response = client.execute(post);
post.abort();
// 新浪微博登录没有301,302之类的跳转;而是返回200,然后用javascript实现的跳转
// int statusCode = response.getStatusLine().getStatusCode();
// if ((statusCode == HttpStatus.SC_MOVED_PERMANENTLY)
// || (statusCode == HttpStatus.SC_MOVED_TEMPORARILY)
// || (statusCode == HttpStatus.SC_SEE_OTHER)
// || (statusCode == HttpStatus.SC_TEMPORARY_REDIRECT)) {
// // 此处重定向处理 此处还未验证
// String newUri = response.getLastHeader(“Location”).getValue();
// get(newUri);
// }
// Get hold of the response entity
HttpEntity entity = response.getEntity();
// 取出跳转的url
// location.replace(“;callback=parent.sinaSSOController.feedBackUrlCallBackticket=ST-MTkxODMxOTI0Nw==-1309224549-xd-263902F174B27BAB9699691BA866EFF2retcode=0”);
String location = getRedirectLocation(dump(entity));
get(location);
}
private static String getRedirectLocation(String content) {
String regex = “location\\.replace\\(\'(.*?)\’\\)”;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(content);
String location = null;
if (matcher.find()) {
location = matcher.group(1);
}
return location;
}
/**
* 打印页面
*
* @param entity
* @throws IOException
*/
private static String dump(HttpEntity entity) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(
entity.getContent(), “utf8”));
//return EntityUtils.toString(entity);
return IOUtils.toString(br);
}
public static void main(String[] args) throws IOException {
login(“username”, “password”);
String result = get(“”);
System.out.println(result);
}
}