`
qll3609120
  • 浏览: 55403 次
社区版块
存档分类
最新评论

web项目模拟登陆发布新浪或腾讯微博

阅读更多

新浪微博开发步骤:

      1、进入新浪开发者平台,注册账号并完善开发者信息,然后根据他的提示创建应用,根据自己需要创建不同类型的应用(我的是网页应用)。

      2、点击我的应用-->应用信息,我们可以查看到自己应用的App key和App Secret 和应用地址,点击高级信息在授权设置里面设置你的回调地址,这个随便你写,我写的是新浪的默认地址:https://api.weibo.com/oauth2/default.html。

      3、下载新浪微博开发的java SDK。把他导入到开发工具,可以看到项目下有几个包:

                  3.1:src包配置文件config.properties和相关的java文件。

                  3.2:example包是微博开发的用例。

                  3.3:(重要)lib目录下的架包,如果要在其他项目用到微博开发,千万别忘记把这些包进         去,可以手动放到lib目录下再build apth 或者maven添加都行。

      4、config的配置:

                  client_ID =自己应用的App key
                  client_SERCRET =应用的App secret
                   baseURL=https://api.weibo.com/2/
                   redirect_URI =https://api.weibo.com/oauth2/default.html
                   accessTokenURL=https://api.weibo.com/oauth2/access_token
                   authorizeURL=https://api.weibo.com/oauth2/authorize
                   rmURL=https://rm.api.weibo.com/2/

       5、模拟登录进行开发,通常情况下我们要转发或者发布微博都要经过授权,授权就需要登录,所以我们使用httpCilent模拟登陆,返回用户授权的code以此来获取taken的值,也就是授权的code,然后进行相应的微博操作,代码:

       

public static AccessToken getToken(String username, String password)
	        throws HttpException, IOException {
		String clientId = WeiboConfig.getValue("client_ID");
                String redirectURI = WeiboConfig.getValue("redirect_URI");
                String url = WeiboConfig.getValue("authorizeURL");
		
		PostMethod postMethod = new PostMethod(url);
		// 应用的App Key
		postMethod.addParameter("client_id", clientId);
		// 应用的重定向页面
		postMethod.addParameter("redirect_uri", redirectURI);
		// 模拟登录参数
		// 开发者或测试账号的用户名和密码
		postMethod.addParameter("userId", username);
		postMethod.addParameter("passwd", password);
		postMethod.addParameter("isLoginSina", "0");
		postMethod.addParameter("action", "submit");
		postMethod.addParameter("response_type", "code");
		HttpMethodParams param = postMethod.getParams();
		param.setContentCharset("UTF-8");
		// 添加头信息
		List<Header> headers = new ArrayList<Header>();
		headers.add(new Header("Referer",
		        "https://api.weibo.com/oauth2/authorize?action=submit&client_id="
		                + clientId + "&redirect_uri=" + redirectURI
		                + "&response_type=code"));
		headers.add(new Header("Host", "api.weibo.com"));
		headers.add(new Header("User-Agent",
		        "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0"));
		HttpClient client = new HttpClient();
		client.getHostConfiguration().getParams()
		        .setParameter("http.default-headers", headers);
		client.executeMethod(postMethod);
		int status = postMethod.getStatusCode();
		System.out.println(status);
		if (status != 302) {
			System.out.println("token刷新失败");
			return null;
		}
		// 解析Token
		Header location = postMethod.getResponseHeader("Location");
		if (location != null) {
			System.out.println(location);
			String retUrl = location.getValue();
			int begin = retUrl.indexOf("code=");
			if (begin != -1) {
				int end = retUrl.indexOf("&", begin);
				if (end == -1)
					end = retUrl.length();
				String code = retUrl.substring(begin + 5, end);
				if (code != null) {				
					System.out.println(code);
					Oauth oauth = new Oauth();
					try {
					AccessToken token =
                                                 oauth.getAccessTokenByCode(code);
						return token;
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}
		return null;
	}

            6、获取了taken的值,就可以进行微博发、/获取用户信息等的操作。发布微博的代码如下:

public static boolean sinaSendWeibo(AccessToken aToken, String content)
	        throws Exception {
                String token = aToken.getAccessToken();
		System.out.println(token + "token的值:");
		boolean flag = false;
		Timeline timeline = new Timeline();
		timeline.client.setToken(token);
		try {
			timeline.UpdateStatus(content);
			flag = true;
		} catch (WeiboException e) {
			flag = false;
			System.out.println(e.getErrorCode());
		}
		return flag;
	}

 腾讯微博开发:

        1、同样需要注册为开发者,建立应用。

         2、

public class UpdateTencentWeibo {
	private DefaultHttpClient httpClient;
	private static final int CONNECT_TIME_OUT = 5000;
	private static final int SOCKET_TIME_OUT = 5000;
	private static final int MAX_CONNECTIONS_PRE_HOST = 20;
	private static final int MAX_TOTAL_CONNECTIONS = 200;
	public UpdateTencentWeibo() {
	this(CONNECT_TIME_OUT, SOCKET_TIME_OUT, MAX_CONNECTIONS_PRE_HOST, MAX_TOTAL_CONNECTIONS, null, null);
	}
	public UpdateTencentWeibo(int connectTimeOut, int socketTimeOut, int maxConnectionsPreHost,
	int maxTotalConnections, List<RouteCfg> routeCfgs, HttpHost proxy) {
	//注册ssl协议
	SSLContext ssl = null;
	SchemeRegistry schemeRegistry = null;
	X509TrustManager x509TrustManager = null;
	SSLSocketFactory sslSocketFactory = null;
	try {
	ssl = SSLContext.getInstance("TLS");
	x509TrustManager = new X509TrustManager() {
		@Override
		public X509Certificate[] getAcceptedIssuers() {
		// TODO Auto-generated method stub
			return null;
		}
		@Override
		public void checkServerTrusted(X509Certificate[] chain, String authType)
				throws CertificateException {
		// TODO Auto-generated method stub
		}
		@Override
		public void checkClientTrusted(X509Certificate[] chain, String authType)
				throws CertificateException {
		}
	};
 
		ssl.init(null, new TrustManager[]{x509TrustManager}, null);
		sslSocketFactory = new SSLSocketFactory(ssl);
		sslSocketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
		//注册http和https协议
		schemeRegistry = new SchemeRegistry();
		schemeRegistry.register(new Scheme("https", 443, sslSocketFactory));
//	          schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
	} catch (NoSuchAlgorithmException e) {
	// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (KeyManagementException e) {
	// TODO Auto-generated catch block
		e.printStackTrace();
	}
	//配置客户端链接管理类
	ThreadSafeClientConnManager connManager = new ThreadSafeClientConnManager(schemeRegistry);
	connManager.setDefaultMaxPerRoute(maxConnectionsPreHost);
	connManager.setMaxTotal(maxTotalConnections);
	//配置http请求连接参数
	
	HttpParams httpParams = new BasicHttpParams();
	
	httpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connectTimeOut);
	
	httpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, socketTimeOut);
	
	//http协议参数配置
	
	HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
	
	HttpProtocolParams.setUseExpectContinue(httpParams, false);
	
	//启用cookie
	
	HttpClientParams.setCookiePolicy(httpParams, CookiePolicy.BROWSER_COMPATIBILITY);
	
	//对特定ip端口修改最大连接数
	
	if (routeCfgs != null) {
	
	for (RouteCfg routeCfg : routeCfgs) {
	
	HttpHost host = new HttpHost(routeCfg.getHost(), routeCfg.getPort());
	
	connManager.setMaxForRoute(new HttpRoute(host), routeCfg.getMaxConnetions());
	
	}
	
	}
	
	//初始化httpClient
	
	httpClient = new DefaultHttpClient(connManager,httpParams);
	
	//添加headers
	
	List<Header> headers = new ArrayList<Header>();
	
	headers.add(new BasicHeader(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"));
	
	headers.add(new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"));
	
	headers.add(new BasicHeader(HttpHeaders.ACCEPT_CHARSET, "UTF-8"));
	
	headers.add(new BasicHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 5.1; rv:25.0) Gecko/01 Firefox/25.0"));
	
	headers.add(new BasicHeader(HttpHeaders.CONNECTION, "keep-alive"));
	
	headers.add(new BasicHeader("X-Forwarded-For", "..0.1"));
	
	headers.add(new BasicHeader("Client-IP", "..0.1"));
	
	headers.add(new BasicHeader("API-RemoteIP", "..0.1"));
	
	httpClient.getParams().setParameter("http.default-headers", headers);
	
	//设置代理
	
	if (proxy != null) {
	
	httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
	
	}
	
	}
	
	/**
	
	* 模拟腾讯微博登陆
	
	* @return code值
	
	*/
	
	public TLoginParams doLogin(String username, String password) {
	
	Properties properties = initProperties();
	
	String clientID = properties.getProperty("client_id");
	
	String redirectURI = properties.getProperty("redirect_uri");
	
	HashMap<String, String> urlMap = getUrlMap(clientID, redirectURI);
	
	String dataRedirect = urlMap.get("data-redirect");
	
	HashMap<String, String> loginInfoMap = preLogin(urlMap);
	
	String loginSig = loginInfoMap.get("login_sig");
	
	String loginUrl = loginInfoMap.get("login_url");
	
	HashMap<String, String> checkMap = isHasVC(dataRedirect, username, loginSig, loginUrl);
	
	String isHasVC = checkMap.get("isHasVC");
	
	String vc = checkMap.get("vc");
	
	String saltUin = checkMap.get("saltUin");
	
	TLoginParams tLoginParams = new TLoginParams();
	
	if (Integer.parseInt(isHasVC) != 0) {
	
	tLoginParams.setDataRedirect(dataRedirect);
	
	tLoginParams.setLoginSig(loginSig);
	
	tLoginParams.setLoginUrl(loginUrl);
	
	tLoginParams.setSaltUin(saltUin);
	
	tLoginParams.setImgURl(getVCode(username));
	
	return tLoginParams;
	
	}
	
	String checkSigUrl = finalLogin(vc, saltUin, dataRedirect, username,
	
	password, loginSig, loginUrl);
	System.out.println(checkSigUrl);
	Properties result = authorize(loginUrl, checkSigUrl);
	
	tLoginParams.setProp(result);
	
	return tLoginParams;
	
	}
	
	/**
	
	* 有验证码时验证登陆
	
	* @param vc
	
	* @param saltUin
	
	* @param dataRedirect
	
	* @param username
	
	* @param password
	
	* @param loginSig
	
	* @param loginUrl
	
	* @return
	
	*/
	
	public TLoginParams doLoginByVC(String vc, String saltUin, String dataRedirect, String username,
	
	String password, String loginSig, String loginUrl) {
	
	TLoginParams tLoginParams = new TLoginParams();
	
	String checkSigUrl = finalLogin(vc, saltUin, dataRedirect, username, password, loginSig, loginUrl);
	
	if (checkSigUrl.equals("您输入的验证码不正确,请重新输入。")) {
	
	tLoginParams.setLogin(false);
	
	return tLoginParams;
	
	}
	
	Properties prop = authorize(loginUrl, checkSigUrl);
	
	tLoginParams.setProp(prop);
	
	return tLoginParams;
	
	}
	
	/**
	
	* 初始化登陆,获取含有sessionkey的url提交链接
	
	* @param clientID 应用ID
	
	* @param redirectURI 应用回调地址
	
	* @return
	
	*/
	
	private HashMap<String, String> getUrlMap(String clientID, String redirectURI) {
	
	String url = "https://open.t.qq.com/cgi-bin/oauth2/authorize?"
	
	+ "client_id=" + clientID
	
	+ "&response_type=code"
	
	+ "&redirect_uri=" + redirectURI
	
	+ "&forcelogin=true";
	
	Header[] headers = new BasicHeader[]{
	
	new BasicHeader(HttpHeaders.HOST, "open.t.qq.com")
	
	};
	
	String htmlDatas = httpGetDatas(url, headers);
	
	HashMap<String, String> map = new HashMap<String, String>();
	
	String data_redirect = null;
	
	String data_proxy = null;
	htmlDatas = htmlDatas.substring(htmlDatas.indexOf("<noscript"),htmlDatas.indexOf("/noscript>"));
	System.out.println(htmlDatas);
	data_redirect = htmlDatas.substring(htmlDatas.indexOf("data-redirect")+15,htmlDatas.indexOf("data-proxy")-2);
    data_proxy = htmlDatas.substring(htmlDatas.indexOf("data-proxy")+12,htmlDatas.indexOf("\">"));
    System.out.println(data_redirect);
    System.out.println(data_proxy);
	
	
	map.put("data-redirect", data_redirect);
	
	
	map.put("data-proxy", data_proxy);
	
	return map;
	
	}
	
	/**
	
	* 预登陆腾讯微博,获取login_sig
	
	* @param urlMap 初始化登陆返回的urlMap
	
	* @return
	
	*/
	
	private HashMap<String, String> preLogin(HashMap<String, String> urlMap) {
	
	String s_url_encode = null;
	
	String proxy_url_encode = null;
	
	String script = null;
	
	try {
	
	s_url_encode = URLEncoder.encode(urlMap.get("data-redirect"), "UTF-8");
	
	proxy_url_encode = URLEncoder.encode(urlMap.get("data-proxy"), "UTF-8");
	
	} catch (UnsupportedEncodingException e) {
	
	// TODO Auto-generated catch block
	
	e.printStackTrace();
	
	}
	
	String url = "https://ui.ptlogin2.qq.com/cgi-bin/login?appid=01"
	
	+ "&s_url=" + s_url_encode
	
	+ "&proxy_url=" + proxy_url_encode
	
	+ "&f_url=loginerroralert"
	
	+ "&style=13"
	
	+ "&daid=6"
	
	+ "&pt_no_auth=1"
	
	+ "&hide_close_icon=1"
	
	+ "&link_target=blank"
	
	+ "&target=blank"
	
	+ "&hide_title_bar=1"
	
	+ "&no_drop_domain=1"
	
	+ "&dummy=1"
	
	+ "&bgcolor=ffffff"
	
	+ "&r=" + Math.random();
	
	Header[] headers = new BasicHeader[]{
	
	new BasicHeader(HttpHeaders.HOST, "ui.ptlogin2.qq.com")
	
	};
	
	String htmlDatas = httpGetDatas(url, headers);
	String headConetnt = htmlDatas.substring(htmlDatas.indexOf("<head"),htmlDatas.indexOf("/head>"));
	script = headConetnt.substring(headConetnt.indexOf("<script"),headConetnt.indexOf("/script>"));
	
	
	String login_sig = script.substring(script.indexOf("login_sig:"), script.indexOf("\",clientip"));
	
	String login_sig_key = login_sig.substring(login_sig.indexOf("\"") + 1);
	
	HashMap<String, String>   loginMap = new HashMap<String, String>();
	
	loginMap.put("login_sig", login_sig_key);
	
	loginMap.put("login_url", url);
	
	return loginMap;
	
	}
	
	/**
	
	* 检查预登陆时是否需要验证码
	
	* @param dataRedirect 初始化登陆返回的map
	
	* @param username 用户名
	
	* @param loginSig TODO
	
	* @param loginUrl TODO
	
	* @return
	
	*/
	
	private HashMap<String, String> isHasVC(String dataRedirect, String username,
	
	String loginSig, String loginUrl){
	
	String url = null;
	
	try {
	
	url = "https://ssl.ptlogin2.qq.com/check?"
	
	+ "regmaster="
	
	+ "&uin=" + username
	
	+ "&appid=01"
	
	+ "&js_ver=52"
	
	+ "&js_type=1"
	
	+ "&login_sig=" + loginSig
	
	+ "&u1=" + URLEncoder.encode(dataRedirect, "UTF-8")
	
	+ "&r=" + Math.random();
	
	} catch (UnsupportedEncodingException e) {
	
	// TODO Auto-generated catch block
	
	e.printStackTrace();
	
	}
	
	Header[] headers = new BasicHeader[]{
	
	new BasicHeader(HttpHeaders.REFERER, loginUrl)
	
	};
	
	String htmlDatas = httpGetDatas(url, headers);
	
	String str = htmlDatas.substring(htmlDatas.indexOf("(") + 1, htmlDatas.indexOf(");"));
	
	String[] strs = str.split(",");
	
	String isHasVC = strs[0].substring(strs[0].indexOf("'") + 1, strs[0].lastIndexOf("'"));
	
	HashMap<String,String> checkVCMap = new HashMap<String, String>();
	
	checkVCMap.put("isHasVC", isHasVC);
	
	String vc = strs[1].substring(strs[1].indexOf("'") + 1, strs[1].lastIndexOf("'"));
	
	checkVCMap.put("vc", vc);
	
	String saltUin = strs[2].substring(strs[2].indexOf("'") + 1, strs[2].lastIndexOf("'"));
	
	checkVCMap.put("saltUin", saltUin);
	
	return checkVCMap;
	
	}
	
	/**
	
	* 获取当前用户登陆所需要的验证码
	
	* @param username 用户名
	
	* @return
	
	*/
	
	public String getVCode(String username) {
	
	String imageUrl = "https://ssl.captcha.qq.com/getimage?"
	
	+ "uin=" +username
	
	+ "&aid=01"
	
	+ "&" + Math.random();
	
	return imageUrl;
	
	}
	
	/**
	
	* 保存验证码
	
	* @param url 验证码链接
	
	*/
	
	public void saveVCodeImg(String url) {
	
	HttpGet getImages = new HttpGet(url);
	
	HttpResponse response = null;
	
	try {
	
	response = httpClient.execute(getImages);
	
	byte[] imageBytes = EntityUtils.toByteArray(response.getEntity());
	
	FileOutputStream fileWrite = new FileOutputStream("vc.jpg");
	
	fileWrite.write(imageBytes);
	
	fileWrite.close();
	
	} catch (ClientProtocolException e) {
	
	// TODO Auto-generated catch block
	
	e.printStackTrace();
	
	} catch (IOException e) {
	
	// TODO Auto-generated catch block
	
	e.printStackTrace();
	
	}
	
	}
	
	/**
	
	* 模拟最终登陆
	
	* @param vc 验证码信息
	
	* @param dataRedirect 链接信息
	
	* @param username 用户名
	
	* @param password 密码
	
	* @param loginSig TODO
	
	* @param loginUrl TODO
	
	* @param saltUin TODO
	
	* @return
	
	*/
	
	private String finalLogin(String vc, String saltUin, String dataRedirect, String username,
	
	String password, String loginSig, String loginUrl){
	
	String p = null;
	
	try {
	
	p = TencentWeiboEncryption.getPassword(saltUin, password, vc);
	
	} catch (Exception e) {
	
	// TODO Auto-generated catch block
	
	e.printStackTrace();
	
	}
	
	String url = null;
	
	try {
	
	url = "https://ssl.ptlogin2.qq.com/login?"
	
	+ "u=" + URLEncoder.encode(username, "UTF-8")
	
	+ "&p=" + p
	
	+ "&verifycode=" + vc
	
	+ "&aid=01"
	
	+ "&u1=" + URLEncoder.encode(dataRedirect, "UTF-8")
	
	+ "&h=1"
	
	+ "&ptredirect=1"
	
	+ "&ptlang=2"
	
	+ "&daid=6"
	
	+ "&from_ui=1"
	
	+ "&dumy="
	
	+ "&low_login_enable=0"
	
	+ "&regmaster="
	
	+ "&fp=loginerroralert"
	
	+ "&action=2-20-" + new Date().getTime()
	
	+ "&mibao_css="
	
	+ "&t=1"
	
	+ "&g=1"
	
	+ "&js_ver=52"
	
	+ "&js_type=1"
	
	+ "&login_sig=" + loginSig
	
	+ "&pt_rsa=0";
	
	} catch (UnsupportedEncodingException e) {
	
	// TODO Auto-generated catch block
	
	e.printStackTrace();
	
	}
	
	Header[] headers = new BasicHeader[]{
	
	new BasicHeader(HttpHeaders.REFERER, loginUrl)
	
	};
	
	String htmlDatas = httpGetDatas(url, headers);
	
	String str = htmlDatas.substring(htmlDatas.indexOf("(") + 1, htmlDatas.indexOf(");"));
	
	String[] strs = str.split(",");
	
	String checkUrl = strs[2].substring(strs[2].indexOf("'") + 1, strs[2].lastIndexOf("'"));
	
	String loginResult = strs[4].substring(strs[4].indexOf("'") + 1, strs[4].lastIndexOf("'"));
	
	if (loginResult.equals("登录成功!")) {
	
	return checkUrl;
	
	}
	
	return loginResult;
	
	}
	
	/**
	
	* 获取最终授权
	
	* @param loginUrl
	
	* @param checkSigUrl
	
	* @return
	
	*/
	
	private Properties authorize(String loginUrl, String checkSigUrl) {
	
	Properties prop = null;
	
	if (checkSigUrl != null) {
	
	Header[] headers = new BasicHeader[]{
	
	new BasicHeader(HttpHeaders.REFERER, loginUrl)
	
	};
	
	String htmlDatas = httpGetDatas(checkSigUrl, headers);
	System.out.println(htmlDatas);
	String content = htmlDatas.substring(htmlDatas.indexOf("<meta"));
//	Document  document = Jsoup.parse(htmlDatas);
//	
//	Element element = document.getElementsByTag("meta").first();
//	
//	String content = element.attr("content");;
//	
	String subContent = content.substring(content.indexOf("?") + 1);
	
	String propStr = subContent.replace("&", "\n");
	System.out.println("propStr"+propStr);
	prop = new Properties();
	
	InputStream stream = new ByteArrayInputStream(propStr.getBytes());
	
	try {
	
	prop.load(stream);
	
	} catch (IOException e) {
	
	// TODO Auto-generated catch block
	
	e.printStackTrace();
	
	}
	
	}
	
	return prop;
	
	}
	
	/**
	
	* 提交URL,并获取页面数据(GET方式)
	
	* @param url 请求页面
	
	* @param headers http请求header
	
	* @return
	
	*/
	
	private String httpGetDatas(String url,Header[] headers) {
	
	String response =null;
	
	HttpResponse httpResponse = null;
	
	if (url == null) {
	
	throw new NullPointerException("URL is null");
	
	}
	
	HttpGet httpGet = new HttpGet(url);
	
	httpGet.setHeaders(headers);
	
	try {
	
		httpResponse = httpClient.execute(httpGet);
		
		response = EntityUtils.toString(httpResponse.getEntity());
	
	} catch (ClientProtocolException e) {
	
	// TODO Auto-generated catch block
	
	e.printStackTrace();
	
	} catch (IOException e) {
	
	// TODO Auto-generated catch block
	
	e.printStackTrace();
	
	}
	
	return response;
	
	}
	
	/**
	
	* 初始化配置信息
	
	* @return
	
	*/
	
	public Properties initProperties() {
		Properties properties = new Properties();
		InputStream inputStream = Thread.currentThread().
		getContextClassLoader().getResourceAsStream("cfg.properties");
		try {
			properties.load(inputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}
			return properties;
		}
	public static void init(OAuthV2 oAuth){  
    	oAuth.setClientId("801535535");  
        oAuth.setClientSecret("615b9601f90625572ec9d4effe55a93b");  
        oAuth.setRedirectUri("http%3A%2F%2Fwww.baidu.com");   
    }  
	public static void main(String[] args) {
		OAuthV2 authV2 = new OAuthV2();
		init(authV2);
		updateStatus(authV2,"测试,");
		
	}
	
	public static void updateInfo(String content){
		OAuthV2 authV2 = new OAuthV2();
		init(authV2);
		updateStatus(authV2,content);
	}
	public static void updateStatus(OAuthV2 authV2,String content){
		UpdateTencentWeibo loginer = new UpdateTencentWeibo();
		
		TLoginParams tLoginParams = loginer.doLogin("hzhbgfwb@sina.com","xjzx8484");
		
		//有验证码时
		
		if (tLoginParams.getProp() == null) {
		
			String saltUin = tLoginParams.getSaltUin();
			
			String dataRedirect = tLoginParams.getDataRedirect();
			
			String loginSig = tLoginParams.getLoginSig();
			
			String loginUrl = tLoginParams.getLoginUrl();
			
			String imgUrl = tLoginParams.getImgURl();
			
			//要返回的验证码
			
			System.err.println(imgUrl);
			
			//测试再次获取验证码
			
			imgUrl = loginer.getVCode("");
			
			//保存验证码(用于测试并查看验证码)
			
			loginer.saveVCodeImg(imgUrl);
			
			Scanner input = new Scanner(System.in);
			
			String vc = input.nextLine();
			
			TLoginParams loginresult =loginer.doLoginByVC(vc, saltUin, dataRedirect, "",
			
			"", loginSig, loginUrl);
			
			//如果验证码录入错误,则重新获取并返回验证码
			
			if (!loginresult.isLogin()) {
		
				System.err.println("验证码错误!重新录入");
				
				imgUrl = loginer.getVCode("");
				
				loginer.saveVCodeImg(imgUrl);
				
				Scanner input2 = new Scanner(System.in);
				
				String vc1 = input2.nextLine();
				
				Properties codeProp = loginer.doLoginByVC(vc1, saltUin, dataRedirect, "",
				
				"", loginSig, loginUrl).getProp();
				
				//System.out.println(TencentWeiboOAuth.getOAuthV2Instance(codeProp));
		
			}else {
		
		//验证码正确则直接输出结果
		
				Properties codeProp = loginresult.getProp();
		
		//System.out.println(TencentWeiboOAuth.getOAuthV2Instance(codeProp));
		
			}
		
			}else {
		
			//无验证码时
			
				Properties codeProp = tLoginParams.getProp();
				System.out.println(codeProp);
				authV2.setOpenid(codeProp.getProperty("openid"));
				authV2.setOpenkey(codeProp.getProperty("openkey"));
				authV2.setAuthorizeCode(codeProp.getProperty("code"));
				authV2.setGrantType("authorize_code");  
		        try {
					OAuthV2Client.accessToken(authV2);
					System.out.println(authV2.getAccessToken()+"taken的值");
					UserAPI getuser = new UserAPI(authV2.getOauthVersion());  
			        String userJson = getuser.otherInfo(authV2, "json", "", authV2.getOpenid());  
			        JSONObject userJsonObject = JSONObject.fromObject(userJson);  
			        Integer errcode = (Integer) userJsonObject.get("errcode");  
			        if (errcode == 0)  
			        {  
			            JSONObject userdataJsonObject = (JSONObject) userJsonObject.get("data");  
			            System.out.println(userdataJsonObject.toString());  
			        }  
			        TAPI tapi = new TAPI(authV2.getOauthVersion());
			        tapi.add(authV2, "json", content, "218.108.6.124");
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
	}
}

 

具体请参考:http://blog.csdn.net/chengxuyuan20100425/article/details/8773393

 

      

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics