腾讯微博数据抓取(java实现)
来源:互联网 发布:731活体实验 知乎 编辑:程序博客网 时间:2024/06/10 02:54
1 不多说,同样贴出相关代码 2 3 4 5 参数实体: 6 7 package token.def; 8 9 import java.io.Serializable; 10 import java.util.Properties; 11 12 public class TLoginParams implements Serializable { 13 14 private static final long serialVersionUID = 6120319409538285515L; 15 private String saltUin; 16 private String dataRedirect; 17 private String loginSig; 18 private String loginUrl; 19 private String imgURl; 20 private String imgCookie; 21 private boolean isLogin = true; 22 private Properties prop; 23 24 public String getSaltUin() { 25 return saltUin; 26 } 27 public void setSaltUin(String saltUin) { 28 this.saltUin = saltUin; 29 } 30 public String getDataRedirect() { 31 return dataRedirect; 32 } 33 public void setDataRedirect(String dataRedirect) { 34 this.dataRedirect = dataRedirect; 35 } 36 public String getLoginSig() { 37 return loginSig; 38 } 39 public void setLoginSig(String loginSig) { 40 this.loginSig = loginSig; 41 } 42 public String getLoginUrl() { 43 return loginUrl; 44 } 45 public void setLoginUrl(String loginUrl) { 46 this.loginUrl = loginUrl; 47 } 48 public String getImgURl() { 49 return imgURl; 50 } 51 public void setImgURl(String imgURl) { 52 this.imgURl = imgURl; 53 } 54 public String getImgCookie() { 55 return imgCookie; 56 } 57 public void setImgCookie(String imgCookie) { 58 this.imgCookie = imgCookie; 59 } 60 public boolean isLogin() { 61 return isLogin; 62 } 63 public void setLogin(boolean isLogin) { 64 this.isLogin = isLogin; 65 } 66 public Properties getProp() { 67 return prop; 68 } 69 public void setProp(Properties prop) { 70 this.prop = prop; 71 } 72 73 @Override 74 public String toString() { 75 return "TLoginParams [saltUin=" + saltUin + ", dataRedirect=" 76 + dataRedirect + ", loginSig=" + loginSig + ", loginUrl=" 77 + loginUrl + ", imgURl=" + imgURl + ", imgCookie=" + imgCookie 78 + ", isLogin=" + isLogin + ", prop=" + prop + "]"; 79 } 80 81 } 82 83 加密实现: 84 85 package token.exe; 86 87 import java.io.ByteArrayOutputStream; 88 import java.io.UnsupportedEncodingException; 89 import java.security.MessageDigest; 90 91 public class TencentWeiboEncryption { 92 93 private static final String HEXSTRING = "0123456789ABCDEF"; 94 95 96 /** 97 * 获取指定字符串的md5值 98 * @param originalText 99 * @return100 * @throws Exception101 */102 private static String md5(String originalText) throws Exception {103 104 byte buf[] = originalText.getBytes("ISO-8859-1");105 StringBuffer hexString = new StringBuffer();106 String result = "";107 String digit = "";108 try {109 MessageDigest algorithm = MessageDigest.getInstance("MD5");110 algorithm.reset();111 algorithm.update(buf);112 byte[] digest = algorithm.digest();113 for (int i = 0; i < digest.length; i++) {114 digit = Integer.toHexString(0xFF & digest[i]);115 if (digit.length() == 1) {116 digit = "0" + digit;117 }118 hexString.append(digit);119 }120 result = hexString.toString();121 } catch (Exception ex) {122 result = "";123 }124 return result.toUpperCase();125 }126 127 128 /**129 * 将16进制编码转换为相应的ASCII字符串130 * @param md5str131 * @return132 * @throws UnsupportedEncodingException133 */134 private static String hexchar2bin(String md5str) throws UnsupportedEncodingException {135 136 ByteArrayOutputStream baos = new ByteArrayOutputStream(md5str.length() / 2);137 for (int i = 0; i < md5str.length(); i = i + 2) {138 baos.write((HEXSTRING.indexOf(md5str.charAt(i)) << 4 | HEXSTRING.indexOf(md5str.charAt(i + 1))));139 }140 return new String(baos.toByteArray(), "ISO-8859-1");141 }142 143 144 /**145 * 获取加密后的密码146 * @param qq147 * @param password148 * @param verifycode149 * @return150 * @throws Exception151 */152 public static String getPassword(String qq, String password, String verifycode) throws Exception {153 String P = hexchar2bin(md5(password));154 String U = md5(P + hexchar2bin(qq.replace("\\x", "").toUpperCase()));155 String V = md5(U + verifycode.toUpperCase());156 return V;157 }158 159 }160 161 微博登陆实现:162 163 package token.exe;164 165 import java.io.ByteArrayInputStream;166 import java.io.FileOutputStream;167 import java.io.IOException;168 import java.io.InputStream;169 import java.io.UnsupportedEncodingException;170 import java.net.URLEncoder;171 import java.security.KeyManagementException;172 import java.security.NoSuchAlgorithmException;173 import java.security.cert.CertificateException;174 import java.security.cert.X509Certificate;175 import java.util.ArrayList;176 import java.util.Date;177 import java.util.HashMap;178 import java.util.List;179 import java.util.Properties;180 import java.util.Scanner;181 182 import javax.net.ssl.SSLContext;183 import javax.net.ssl.TrustManager;184 import javax.net.ssl.X509TrustManager;185 186 import org.apache.http.Header;187 import org.apache.http.HttpHeaders;188 import org.apache.http.HttpHost;189 import org.apache.http.HttpResponse;190 import org.apache.http.HttpVersion;191 import org.apache.http.client.ClientProtocolException;192 import org.apache.http.client.methods.HttpGet;193 import org.apache.http.client.params.CookiePolicy;194 import org.apache.http.client.params.HttpClientParams;195 import org.apache.http.conn.params.ConnRoutePNames;196 import org.apache.http.conn.routing.HttpRoute;197 import org.apache.http.conn.scheme.PlainSocketFactory;198 import org.apache.http.conn.scheme.Scheme;199 import org.apache.http.conn.scheme.SchemeRegistry;200 import org.apache.http.conn.ssl.SSLSocketFactory;201 import org.apache.http.impl.client.DefaultHttpClient;202 import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;203 import org.apache.http.message.BasicHeader;204 import org.apache.http.params.CoreConnectionPNames;205 import org.apache.http.params.HttpParams;206 import org.apache.http.params.HttpProtocolParams;207 import org.apache.http.params.SyncBasicHttpParams;208 import org.apache.http.util.EntityUtils;209 import org.jsoup.Jsoup;210 import org.jsoup.nodes.Document;211 import org.jsoup.nodes.Element;212 213 import token.TencentWeiboOAuth;214 import token.def.TLoginParams;215 216 import com.tencent.weibo.beans.RouteCfg;217 218 public class TencentWeiboLoginer {219 220 private DefaultHttpClient httpClient;221 222 //默认连接配置参数223 private static final int CONNECT_TIME_OUT = 5000;224 private static final int SOCKET_TIME_OUT = 5000;225 private static final int MAX_CONNECTIONS_PRE_HOST = 20;226 private static final int MAX_TOTAL_CONNECTIONS = 200;227 228 public TencentWeiboLoginer() {229 this(CONNECT_TIME_OUT, SOCKET_TIME_OUT, MAX_CONNECTIONS_PRE_HOST, MAX_TOTAL_CONNECTIONS, null, null);230 }231 232 public TencentWeiboLoginer(int connectTimeOut, int socketTimeOut, int maxConnectionsPreHost,233 int maxTotalConnections, List<RouteCfg> routeCfgs, HttpHost proxy) {234 235 //注册ssl协议236 SSLContext ssl = null;237 SchemeRegistry schemeRegistry = null;238 X509TrustManager x509TrustManager = null;239 SSLSocketFactory sslSocketFactory = null;240 try {241 ssl = SSLContext.getInstance("TLS");242 x509TrustManager = new X509TrustManager() {243 244 @Override245 public X509Certificate[] getAcceptedIssuers() {246 // TODO Auto-generated method stub247 return null;248 }249 250 @Override251 public void checkServerTrusted(X509Certificate[] chain, String authType)252 throws CertificateException {253 // TODO Auto-generated method stub254 255 }256 257 @Override258 public void checkClientTrusted(X509Certificate[] chain, String authType)259 throws CertificateException {260 // TODO Auto-generated method stub261 262 }263 };264 ssl.init(null, new TrustManager[]{x509TrustManager}, null);265 sslSocketFactory = new SSLSocketFactory(ssl); 266 sslSocketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);267 268 //注册http和https协议269 schemeRegistry = new SchemeRegistry();270 schemeRegistry.register(new Scheme("https", 443, sslSocketFactory));271 // schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));272 } catch (NoSuchAlgorithmException e) {273 // TODO Auto-generated catch block274 e.printStackTrace();275 } catch (KeyManagementException e) {276 // TODO Auto-generated catch block277 e.printStackTrace();278 }279 280 //配置客户端链接管理类281 ThreadSafeClientConnManager connManager = new ThreadSafeClientConnManager(schemeRegistry);282 connManager.setDefaultMaxPerRoute(maxConnectionsPreHost);283 connManager.setMaxTotal(maxTotalConnections);284 285 //配置http请求连接参数286 HttpParams httpParams = new SyncBasicHttpParams();287 httpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connectTimeOut);288 httpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, socketTimeOut);289 290 //http协议参数配置291 HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);292 HttpProtocolParams.setUseExpectContinue(httpParams, false);293 294 //启用cookie295 HttpClientParams.setCookiePolicy(httpParams, CookiePolicy.BROWSER_COMPATIBILITY);296 297 //对特定ip端口修改最大连接数298 if (routeCfgs != null) {299 for (RouteCfg routeCfg : routeCfgs) {300 HttpHost host = new HttpHost(routeCfg.getHost(), routeCfg.getPort());301 connManager.setMaxForRoute(new HttpRoute(host), routeCfg.getMaxConnetions());302 }303 }304 305 //初始化httpClient306 httpClient = new DefaultHttpClient(connManager,httpParams);307 308 //添加headers309 List<Header> headers = new ArrayList<Header>();310 headers.add(new BasicHeader(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"));311 headers.add(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"));312 headers.add(new BasicHeader(HttpHeaders.ACCEPT_CHARSET, "UTF-8"));313 headers.add(new BasicHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 5.1; rv:25.0) Gecko/20100101 Firefox/25.0"));314 headers.add(new BasicHeader(HttpHeaders.CONNECTION, "keep-alive"));315 headers.add(new BasicHeader("X-Forwarded-For", "192.168.0.1"));316 headers.add(new BasicHeader("Client-IP", "192.168.0.1"));317 headers.add(new BasicHeader("API-RemoteIP", "192.168.0.1"));318 httpClient.getParams().setParameter("http.default-headers", headers);319 320 //设置代理321 if (proxy != null) {322 httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);323 }324 325 }326 327 /**328 * 模拟腾讯微博登陆329 * @return code值330 */331 public TLoginParams doLogin(String username, String password) {332 333 Properties properties = initProperties();334 String clientID = properties.getProperty("client_id");335 String redirectURI = properties.getProperty("redirect_uri");336 337 HashMap<String, String> urlMap = getUrlMap(clientID, redirectURI);338 String dataRedirect = urlMap.get("data-redirect");339 340 HashMap<String, String> loginInfoMap = preLogin(urlMap);341 String loginSig = loginInfoMap.get("login_sig");342 String loginUrl = loginInfoMap.get("login_url");343 344 HashMap<String, String> checkMap = isHasVC(dataRedirect, username, loginSig, loginUrl);345 String isHasVC = checkMap.get("isHasVC");346 String vc = checkMap.get("vc");347 String saltUin = checkMap.get("saltUin");348 349 TLoginParams tLoginParams = new TLoginParams();350 if (Integer.parseInt(isHasVC) != 0) {351 tLoginParams.setDataRedirect(dataRedirect);352 tLoginParams.setLoginSig(loginSig);353 tLoginParams.setLoginUrl(loginUrl);354 tLoginParams.setSaltUin(saltUin);355 tLoginParams.setImgURl(getVCode(username));356 return tLoginParams;357 }358 359 String checkSigUrl = finalLogin(vc, saltUin, dataRedirect, username, 360 password, loginSig, loginUrl);361 Properties result = authorize(loginUrl, checkSigUrl);362 tLoginParams.setProp(result);363 return tLoginParams;364 }365 366 /**367 * 有验证码时验证登陆368 * @param vc369 * @param saltUin370 * @param dataRedirect371 * @param username372 * @param password373 * @param loginSig374 * @param loginUrl375 * @return376 */377 public TLoginParams doLoginByVC(String vc, String saltUin, String dataRedirect, String username, 378 String password, String loginSig, String loginUrl) {379 380 TLoginParams tLoginParams = new TLoginParams();381 382 String checkSigUrl = finalLogin(vc, saltUin, dataRedirect, username, password, loginSig, loginUrl);383 if (checkSigUrl.equals("您输入的验证码不正确,请重新输入。")) {384 tLoginParams.setLogin(false);385 return tLoginParams;386 }387 Properties prop = authorize(loginUrl, checkSigUrl);388 389 tLoginParams.setProp(prop);390 return tLoginParams;391 }392 393 /**394 * 初始化登陆,获取含有sessionkey的url提交链接395 * @param clientID 应用ID396 * @param redirectURI 应用回调地址397 * @return398 */399 private HashMap<String, String> getUrlMap(String clientID, String redirectURI) {400 401 String url = "https://open.t.qq.com/cgi-bin/oauth2/authorize?" 402 + "client_id=" + clientID403 + "&response_type=code"404 + "&redirect_uri=" + redirectURI405 + "&forcelogin=true";406 Header[] headers = new BasicHeader[]{407 new BasicHeader(HttpHeaders.HOST, "open.t.qq.com")408 };409 410 String htmlDatas = httpGetDatas(url, headers);411 HashMap<String, String> map = new HashMap<String, String>();412 String data_redirect = null;413 String data_proxy = null;414 415 Document document = Jsoup.parse(htmlDatas);416 Element element = document.getElementsByTag("noscript").first();417 data_redirect = element.attr("data-redirect");418 map.put("data-redirect", data_redirect);419 data_proxy = element.attr("data-proxy");420 map.put("data-proxy", data_proxy);421 return map;422 }423 424 /**425 * 预登陆腾讯微博,获取login_sig426 * @param urlMap 初始化登陆返回的urlMap427 * @return428 */429 private HashMap<String, String> preLogin(HashMap<String, String> urlMap) {430 431 String s_url_encode = null;432 String proxy_url_encode = null;433 String script = null;434 try {435 s_url_encode = URLEncoder.encode(urlMap.get("data-redirect"), "UTF-8");436 proxy_url_encode = URLEncoder.encode(urlMap.get("data-proxy"), "UTF-8");437 } catch (UnsupportedEncodingException e) {438 // TODO Auto-generated catch block439 e.printStackTrace();440 }441 String url = "https://ui.ptlogin2.qq.com/cgi-bin/login?appid=46000101"442 + "&s_url=" + s_url_encode443 + "&proxy_url=" + proxy_url_encode444 + "&f_url=loginerroralert"445 + "&style=13" 446 + "&daid=6"447 + "&pt_no_auth=1"448 + "&hide_close_icon=1" 449 + "&link_target=blank"450 + "&target=blank"451 + "&hide_title_bar=1"452 + "&no_drop_domain=1"453 + "&dummy=1"454 + "&bgcolor=ffffff"455 + "&r=" + Math.random();456 Header[] headers = new BasicHeader[]{457 new BasicHeader(HttpHeaders.HOST, "ui.ptlogin2.qq.com")458 };459 String htmlDatas = httpGetDatas(url, headers);460 461 Document document = Jsoup.parse(htmlDatas);462 Element headElement = document.getElementsByTag("head").first();463 Element element = headElement.getElementsByTag("script").first();464 script = element.html();465 466 String login_sig = script.substring(script.indexOf("login_sig:"), script.indexOf("\",clientip"));467 String login_sig_key = login_sig.substring(login_sig.indexOf("\"") + 1);468 469 HashMap<String, String> loginMap = new HashMap<String, String>();470 loginMap.put("login_sig", login_sig_key);471 loginMap.put("login_url", url);472 return loginMap;473 } 474 475 /**476 * 检查预登陆时是否需要验证码477 * @param dataRedirect 初始化登陆返回的map478 * @param username 用户名479 * @param loginSig TODO480 * @param loginUrl TODO481 * @return482 */483 private HashMap<String, String> isHasVC(String dataRedirect, String username, 484 String loginSig, String loginUrl){485 486 String url = null;487 try {488 url = "https://ssl.ptlogin2.qq.com/check?"489 + "regmaster="490 + "&uin=" + username491 + "&appid=46000101"492 + "&js_ver=10052"493 + "&js_type=1"494 + "&login_sig=" + loginSig495 + "&u1=" + URLEncoder.encode(dataRedirect, "UTF-8")496 + "&r=" + Math.random();497 } catch (UnsupportedEncodingException e) {498 // TODO Auto-generated catch block499 e.printStackTrace();500 }501 Header[] headers = new BasicHeader[]{502 new BasicHeader(HttpHeaders.REFERER, loginUrl)503 };504 505 String htmlDatas = httpGetDatas(url, headers);506 507 String str = htmlDatas.substring(htmlDatas.indexOf("(") + 1, htmlDatas.indexOf(");"));508 String[] strs = str.split(",");509 510 String isHasVC = strs[0].substring(strs[0].indexOf("'") + 1, strs[0].lastIndexOf("'"));511 HashMap<String,String> checkVCMap = new HashMap<String, String>();512 checkVCMap.put("isHasVC", isHasVC); 513 String vc = strs[1].substring(strs[1].indexOf("'") + 1, strs[1].lastIndexOf("'"));514 checkVCMap.put("vc", vc); 515 String saltUin = strs[2].substring(strs[2].indexOf("'") + 1, strs[2].lastIndexOf("'"));516 checkVCMap.put("saltUin", saltUin);517 518 return checkVCMap;519 }520 521 /**522 * 获取当前用户登陆所需要的验证码523 * @param username 用户名524 * @return525 */526 public String getVCode(String username) {527 528 String imageUrl = "https://ssl.captcha.qq.com/getimage?"529 + "uin=" +username530 + "&aid=46000101"531 + "&" + Math.random();532 533 return imageUrl;534 }535 536 /**537 * 保存验证码538 * @param url 验证码链接539 */540 public void saveVCodeImg(String url) {541 542 HttpGet getImages = new HttpGet(url);543 HttpResponse response = null;544 try {545 response = httpClient.execute(getImages);546 byte[] imageBytes = EntityUtils.toByteArray(response.getEntity()); 547 FileOutputStream fileWrite = new FileOutputStream("vc.jpg");548 fileWrite.write(imageBytes);549 fileWrite.close();550 } catch (ClientProtocolException e) {551 // TODO Auto-generated catch block552 e.printStackTrace();553 } catch (IOException e) {554 // TODO Auto-generated catch block555 e.printStackTrace();556 }557 }558 559 /**560 * 模拟最终登陆561 * @param vc 验证码信息562 * @param dataRedirect 链接信息563 * @param username 用户名564 * @param password 密码565 * @param loginSig TODO566 * @param loginUrl TODO567 * @param saltUin TODO568 * @return569 */570 private String finalLogin(String vc, String saltUin, String dataRedirect, String username, 571 String password, String loginSig, String loginUrl){572 573 String p = null;574 try {575 p = TencentWeiboEncryption.getPassword(saltUin, password, vc);576 } catch (Exception e) {577 // TODO Auto-generated catch block578 e.printStackTrace();579 }580 String url = null;581 try {582 url = "https://ssl.ptlogin2.qq.com/login?"583 + "u=" + URLEncoder.encode(username, "UTF-8")584 + "&p=" + p585 + "&verifycode=" + vc586 + "&aid=46000101"587 + "&u1=" + URLEncoder.encode(dataRedirect, "UTF-8")588 + "&h=1"589 + "&ptredirect=1"590 + "&ptlang=2052"591 + "&daid=6"592 + "&from_ui=1"593 + "&dumy="594 + "&low_login_enable=0"595 + "®master="596 + "&fp=loginerroralert"597 + "&action=2-20-" + new Date().getTime()598 + "&mibao_css="599 + "&t=1"600 + "&g=1"601 + "&js_ver=10052"602 + "&js_type=1"603 + "&login_sig=" + loginSig604 + "&pt_rsa=0";605 } catch (UnsupportedEncodingException e) {606 // TODO Auto-generated catch block607 e.printStackTrace();608 }609 610 Header[] headers = new BasicHeader[]{611 new BasicHeader(HttpHeaders.REFERER, loginUrl)612 };613 614 String htmlDatas = httpGetDatas(url, headers);615 String str = htmlDatas.substring(htmlDatas.indexOf("(") + 1, htmlDatas.indexOf(");"));616 String[] strs = str.split(",");617 618 String checkUrl = strs[2].substring(strs[2].indexOf("'") + 1, strs[2].lastIndexOf("'"));619 String loginResult = strs[4].substring(strs[4].indexOf("'") + 1, strs[4].lastIndexOf("'"));620 621 if (loginResult.equals("登录成功!")) {622 return checkUrl;623 }624 return loginResult;625 }626 627 628 /**629 * 获取最终授权630 * @param loginUrl631 * @param checkSigUrl632 * @return633 */634 private Properties authorize(String loginUrl, String checkSigUrl) {635 636 Properties prop = null;637 if (checkSigUrl != null) {638 Header[] headers = new BasicHeader[]{639 new BasicHeader(HttpHeaders.REFERER, loginUrl)640 };641 String htmlDatas = httpGetDatas(checkSigUrl, headers);642 643 Document document = Jsoup.parse(htmlDatas);644 Element element = document.getElementsByTag("meta").first();645 String content = element.attr("content");;646 647 String subContent = content.substring(content.indexOf("?") + 1);648 String propStr = subContent.replace("&", "\n");649 650 prop = new Properties();651 InputStream stream = new ByteArrayInputStream(propStr.getBytes());652 try {653 prop.load(stream);654 } catch (IOException e) {655 // TODO Auto-generated catch block656 e.printStackTrace();657 }658 }659 return prop;660 }661 662 663 /**664 * 提交URL,并获取页面数据(GET方式)665 * @param url 请求页面666 * @param headers http请求header667 * @return668 */669 private String httpGetDatas(String url,Header[] headers) {670 671 String response =null;672 HttpResponse httpResponse = null;673 if (url == null) {674 throw new NullPointerException("URL is null");675 }676 HttpGet httpGet = new HttpGet(url);677 httpGet.setHeaders(headers);678 679 try {680 httpResponse = httpClient.execute(httpGet);681 response = EntityUtils.toString(httpResponse.getEntity());682 683 } catch (ClientProtocolException e) {684 // TODO Auto-generated catch block685 e.printStackTrace();686 } catch (IOException e) {687 // TODO Auto-generated catch block688 e.printStackTrace();689 }690 return response;691 }692 693 /**694 * 初始化配置信息695 * @return696 */697 public Properties initProperties() {698 699 Properties properties = new Properties();700 InputStream inputStream = Thread.currentThread().701 getContextClassLoader().getResourceAsStream("cfg.properties");702 try {703 properties.load(inputStream);704 } catch (IOException e) {705 // TODO Auto-generated catch block706 e.printStackTrace();707 }708 return properties;709 }710 711 public static void main(String[] args) {712 713 TencentWeiboLoginer loginer = new TencentWeiboLoginer();714 TLoginParams tLoginParams = loginer.doLogin("","");715 //有验证码时716 if (tLoginParams.getProp() == null) {717 String saltUin = tLoginParams.getSaltUin();718 String dataRedirect = tLoginParams.getDataRedirect();719 String loginSig = tLoginParams.getLoginSig();720 String loginUrl = tLoginParams.getLoginUrl();721 String imgUrl = tLoginParams.getImgURl();722 //要返回的验证码723 System.err.println(imgUrl);724 725 //测试再次获取验证码726 imgUrl = loginer.getVCode("");727 //保存验证码(用于测试并查看验证码)728 loginer.saveVCodeImg(imgUrl);729 730 Scanner input = new Scanner(System.in);731 String vc = input.nextLine();732 733 734 TLoginParams loginresult =loginer.doLoginByVC(vc, saltUin, dataRedirect, "", 735 "", loginSig, loginUrl);736 //如果验证码录入错误,则重新获取并返回验证码737 if (!loginresult.isLogin()) {738 System.err.println("验证码错误!重新录入");739 imgUrl = loginer.getVCode("");740 loginer.saveVCodeImg(imgUrl);741 Scanner input2 = new Scanner(System.in);742 String vc1 = input2.nextLine();743 Properties codeProp = loginer.doLoginByVC(vc1, saltUin, dataRedirect, "", 744 "", loginSig, loginUrl).getProp();745 System.out.println(TencentWeiboOAuth.getOAuthV2Instance(codeProp));746 }else {747 //验证码正确则直接输出结果748 Properties codeProp = loginresult.getProp();749 System.out.println(TencentWeiboOAuth.getOAuthV2Instance(codeProp));750 }751 752 }else {753 //无验证码时754 Properties codeProp = tLoginParams.getProp();755 System.out.println(TencentWeiboOAuth.getOAuthV2Instance(codeProp));756 }757 }758 }759 760 761 762 上述代码完整模拟了腾讯微博的登陆过程,并最终获得授权
0 0
- 腾讯微博数据抓取(java实现)
- 新浪微博数据抓取(java实现)
- java爬虫实现数据抓取
- Java抓取新浪微博首页数据
- Python 实现腾讯新闻抓取
- Python 实现腾讯新闻抓取
- python 抓取腾讯微博数据并做简单的分析
- python 抓取腾讯微博数据并做简单的分析 .
- java实现网络爬虫--抓取网站数据
- 微博数据抓取
- 用selenium实现对微博搜索数据的抓取
- Java登录到新浪微博抓取数据
- Java模拟新浪微博登陆抓取数据
- Java模拟新浪微博登陆抓取数据
- Java模拟新浪微博登陆抓取数据
- java抓取网站数据
- java抓取网页数据
- java 抓取网站数据
- SQL中的cast和convert的用法
- 使用AWT组件实现验证码功能
- 在Tomcat下配置Solr 4.x 版本
- ARP解析过程
- 新浪微博数据抓取(java实现)
- 腾讯微博数据抓取(java实现)
- 使用jsTree动态加载节点
- 在OpenShift云空间上部署java web应用
- windows下安装openssh服务并实现远程登录
- (转载)重新对APK文件签名
- 使用Myeclipse创建自定义签名debug keystore
- 【Hadoop技术博客推荐】Hive的那些事
- Linux基本操作命令
- MyEclipse 快捷键