Java моделирует Sina и Tencent автоматически входить в систему и отправляет функции Weibo всем для вашей ссылки. Конкретный контент заключается в следующем
1. Подготовка
Просто войдите в систему, не подавая заявки на учетную запись Sina и Tencent's Developer. Если вам нужно отправить функцию Weibo, вам необходимо подать заявку на учетную запись Developer Sina и Tencent и добавить тестовое приложение.
Пожалуйста, обратитесь к официальному документу справки для процесса. Адрес приложения: Sina: http://open.weibo.com Tengxun: http://dev.t.qq.com/
Нам нужен ключ приложения, приложение Secre и redirect_uri. Исходный код уже содержит тестовый ключ, к которому я применил, но из -за ограничений ваша учетная запись не может быть успешно войти в систему, используя мой ключ напрямую.
2. Что следует отметить
1) Следует отметить, что ключ приложения приложения, приложение Secre и redirect_uri находятся в соответствующем файле конфигурации config.properties в корневом каталоге проекта.
client_id = 1745656892
client_sercret = 66056719c1d8ca7bcaf36f411217cefa
redirect_uri = www.baidu.com
Поскольку redirect_uri используется только для тестирования и не имеет прямой страницы обратного вызова, вы можете просто заполнить адрес здесь, но будьте осторожны, чтобы соответствовать «странице вызовов» в настройках, представленных в приложении.
2) Тестовая учетная запись в коде должна добавить тестовую учетную запись самостоятельно. «Аккаунт с информацией о тестировании приложения» Sina; Тенгксун "Белый список управления разрешением". Конечно, также возможно напрямую использовать учетную запись разработчика.
3) Отправьте Weibo, чтобы процитировать Sina's Weibo4j-OAuth2-бета2.1.1.zip и Tengxun's java_sdk_v1.2.1.7z. Основной класс находится под пакетом UTIL.
3. Код ключа
1) Сина
пакет org.utils; импорт java.io.ioexception; import java.util.arraylist; import java.util.list; import org.apache.commons.httpclient.header; import org.apache.commons.httpclient.httpclient; import org.Apache..commons.httpclient.method.httpclient; import org.apache..commons.httpclient.method.httpclient; import org.apache..commons.htt org.apache.commons.httpclient.params.httpmethodparams; import org.apache.http.httpexception; импорт org.core.weibo.sina.oauth; import org.core.wibo.sina.timeline; импорт org.core.wibo.sina.Http.Access. org.core.weibo.sina.model.weiboexception; import org.core.weibo.sina.weibo4j.util.weiboconfig;/**** Симуляция автоматического входа в систему и одновременно weibo* @author zdw**/public sina {/**** Пароль * @return * @Throws httpexception * @Throws ioException */ public static accessToken getToken (String username, String password) бросает httpexception, ioexception {String clientId = weiboConfig.getValue ("client_id"); String redirecturi = weiboconfig.getvalue ("redirect_uri"); String url = weiboconfig.getvalue ("AutorrizeUrl"); Postmethod postmethod = new postmethod (url); // ключ приложения postmethod.addparameter ("client_id", clientId); // страница перенаправления приложения postmethod.addparameter ("redirect_uri", redirecturi); // Издевательные параметры входа в систему // Разработчик или тестовая учетная запись имени пользователя и пароля postmethod.addparameter ("userId", userName); postmethod.addparameter ("passwd", пароль); postmethod.addparameter ("isloginsina", "0"); postmethod.addparameter ("action", "отправить"); postmethod.addparameter ("response_type", "code"); Httpmethodparams param = postmethod.getParams (); param.setContentCharset ("UTF-8"); // Добавить информацию о информации заголовка <Header> Headers = new ArrayList <Header> (); headers.add (новый заголовок («Реферат», «https://api.weibo.com/oauth2/authorize?client_id="+clientid+"&redirect_uri="+redirecturi+"&from=sina&response_type=code»)); headers.add (новый заголовок («Хост», «api.weibo.com»)); Headers.Add (новый заголовок («Пользовательский агент», «Мозилла/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", заголовки); client.executemethod (postmethod); int status = postmethod.getStatuscode (); System.out.println (Status); if (status! = 302) {System.out.println ("Обновление токена не удалось"); вернуть ноль; } // Разрешение местоположения заголовка токена = postmethod.getResponseHeader ("location"); if (location! = null) {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) {oauth oauth = new Oauth (); try {accesstoken token = oauth.getAccesstokenbycode (code); вернуть токен; } catch (Exception e) {e.printstackTrace (); }}}} return null; } / ** * Отправить weibo * @param token certified token * @param content weibo content * @return * @throhs exception * / public static boolean sinasendweibo (string token, string content) throws Exception {boolean flag = false; Временная шкала = новая временная шкала (); Timeline.client.setToken (токен); try {timeline.updatestatus (content); flag = true; } catch (weiboException e) {flag = false; System.out.println (e.getErrorCode ()); } вернуть флаг; } public static void main (string [] args) бросает исключение {accessToken at = getToken ("xxxx", "xxx"); sinasendweibo (at.getaccesstoken (), «тест»); }} 2) Tengxun
пакет org.utils; импорт java.io.bytearrayoutputstream; import java.io.fileOutputStream; импорт java.io.ioexception; импорт java.io.OutputStream; импорт java.io.unsupportedencodingexception; импорт java.security.messagedigest; import.ut.scanner; импорт. net.sf.json.jsonobject; import org.apache.http.httpentity; import org.apache.http.httpresponse; import org.apache.http.client.clientprotocolexception; импорт org.apache.http.client.httpclient; org.apache.http.client.methods.httpget; import org.apache.http.impl.client.defaulthttpclient; импорт org.apache.http.util.entityutils; import.core.wibo.tencent.api.Util org.core.weibo.tencent.oauthv2.oauthv2; import org.core.weibo.tencent.oauthv2.oauthv2client;/****tengxun автоматически входит в систему и получает личную информацию*@author zdw**/public tencent {public static final hexstring = "012779999999; public static oauthv2 oauth = new oauthv2 (); Частный статический httpclient client = new Defaulthttpclient (); // Первоначальная информация о приложении OAuth public static void init (oauthv2 oauth) {oauth.setClientId ("801216331"); OAuth.setClientsecret ("EA71B26B0CBE5778CDD1C09AD17553A3"); oauth.setredirecturi ("http://www.tencent.com/zh-cn/index.shtml"); }/** * * * @param qq * http://check.ptlogin2.qq.com/check?uin= appid=15000101&r=} * Вернувшееся третье значение * @param password * qq password * @param veserifycode * verification * @return encrypted password * @throws unsupportencod * @TrOWERSININGENTINGECPECTING * @TROWNINGECPECTINGENTINGENTINGENTINGECOD String getPassword (String QQ, String Password, String VerifyCode) Throws Exception {String p = hexChar2bin (md5 (пароль)); String u = md5 (p + hexchar2bin (qq.replace ("// x", "") .touppercase ())); String v = md5 (u + verifycode.touppercase ()); возврат V; } public Static String md5 (string rigintext) Throws Exception {byte buf [] = origintext.getbytes ("iso-8859-1"); StringBuffer hexstring = new StringBuffer (); String result = ""; String Digit = ""; try {messagegest algorithm = messagedigest.getinstance ("md5"); Algorithm.reset (); Algorithm.update (BUF); byte [] digest = algorithm.digest (); for (int i = 0; i <digest.length; i ++) {digit = integer.tohexstring (0xff & digest [i]); if (digit.length () == 1) {digit = "0" + Digit; } hexstring.append (Digit); } result = hexstring.toString (); } catch (Exception ex) {result = ""; } return result.touppercase (); } public Static String HexChar2bin (String MD5STR) бросает UnsupportEncodingException {bytearrayOutputStream baos = new BytearRayoutputStream (md5str.length () / 2); for (int i = 0; i <md5str.length (); i = i + 2) {baos.write ((hexstring.indexof (md5str.charat (i)) << 4 | hexstring .indexof (md5str.charat (i + 1))))); } вернуть новую строку (baos.tobytearray (), "iso-8859-1"); }/**** Вход в систему моделирования* @param QQ QQ Номер* @param Пароль QQ пароль* @Throws Exception*/public Static Void Login (String QQ, String Password) Throws Exception {httpget get = new httpget ("https://ssl.ptlogin2.qq.com/check?uin=" "& appid = 46000101 & ptlang = 2052 & js_type = 2 & js_ver = 10009 & r = 0,7948186025712065"); Httpresponse response = client.execute (get); String entity = entityutils.tostring (response.getentity ()); String [] checknum = entity.substring (entity.indexof ("(") + 1, entity.lastindexof (")")). Заменить ("'", "") .split (","); String pass = ""; String rassedata = ""; // Получить код проверки (если есть вывод кода проверки в c: /code.jpg, введите его и продолжайте выполнять if ("1" .equals (cecknum [0]))) {// uin - номер QQ или имя пользователя weibo httpget betimg = new Httpget ("http://captcha.qq.com/getimage?aid=46000101&r=0.3478789969909082&uin=" + qq + "& vc_type =" + checknum [1] + ""); Httpresponse response2 = client.execute (getimg); OutputStream OS = new FileOutputStream ("c: /code.jpg"); byte [] b = entityutils.tobytearray (repply2.getentity ()); Os.Write (B, 0, B.Length); os.close (); Сканер в = новый сканер (System.in); responseData = in.nextline (); in.close (); } else {responseData = checknum [1]; } / ** ************************ /** ******************************** "& aid = 46000101 & target = top & u1 = https%3a%2fopen.t.qq.com%2fcgi-bin%2foauth2%2fauthorize%3fclient_id%3d"+ oauth.getClientId ()+ "%26Response_type%3dcode%26 Redirect_URITID ()+"%26Response_type%3dcode. oauth.getredirecturi ()+ "& ptredirect = 1 & H = 1 & from_ui = 1 & dumy = & qlogin_param = abbfew = ddd & формулировка =%e6%8e%88%e6%9d %83 & fp = loginerRoralert & action = 8-13-240977 & g = 1 & t = 1 & dummy = & js_type = 2 & js_ver = 10009 "); Httpresponse response2 = client.execute (getimg); Httpentity httpentity = repply2.getentity (); String entityxc = entityutils.tostring (httpentity); System.out.println (entityxc); } /** * * Запросить приложение Weibo Open Platform для возврата на страницу авторизации входа, но если нет SessionKey, вход в систему никогда не будет успешным. SessionKey находится в URL -адресе, размещенном в входной теге на возвращенной странице, поэтому вам нужно получить этот сеанс. Фактически, вы можете напрямую получить доступ к URL в теге и прыжках */public static String getUrl (), который предлагает ClientProtocolexception, ioException {httpget getCode = new httpget ("https://open.t.qq.com/cgi-bin/oauth2/authorize? "& response_type = code & redirect_uri =" + oauth.getredirecturi () + "& checkstatus = yes & appfrom = & g_tk & checktype = showauth & state ="); Httpresponse response3 = client.execute (getCode); Httpentity entityqqq = response3.getentity (); String entityxcc = entityutils.tostring (entityqqq); String form = entityxcc.substring (entityxcc.indexof ("<form"), entityxcc .indexof ("</form>")); String [] ss = form.split ("/>"); String input = ""; for (int i = 0; i <ss.length; i ++) {if (ss [i] .indexof ("name =/" u1/"")> 0) {input = ss [i]; }; } return input.subString (input.Indexof ("value =/" ") + 7, input.Indexof ("/"type =/" "));}/** * parse и set token * @param get * @Throws Exception */public void setTectOken (httpget get) exception {httpresponses4 = клиент. response4.getentity (); Entity = getUrlCode.substring (getUrlCode.indexof ("url ="), getUrlCode.indexof ("/"> ")); StringBuffer sb = new StringBuffer (); String [] arr = entity.split ("//?") [1] .split ("&"); for (int x = 0; x <arr.length; x ++) {if (arr [x] .indexof ("code")> = 0 || arr [x] .IndexOf ("openID")> = 0 || arr [x] .IndexOf ("openKey")> = 0) {sb.Append (arr [x]+"&"); }; } // Использовать код для получения AccessToken OAuthv2client.parseauthorization (sb.substring (0, sb.length () - 1), oauth); oauth.setgranttype ("Authorize_code"); Oauthv2client.accesstoken (oauth); } /**** Call (интерфейс аккаунта Tengxun Open Platform), чтобы получить информацию человека* @Throhs Exception* /public static void getInfo (), бросает исключение {// Вывод токена. Если вы получите токен, это означает, что вход в систему успешно, и вы можете выполнить следующую операцию. System.out.println ("token ="+oauth.getAccesstoken ()); Userapi getUser = new userApi (oauth.getoauthversion ()); String userJson = getUser.otherinfo (oauth, "json", "", oauth.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 ()); }} public static void main (string [] args) бросает исключение {init (oauth); логин ("123145", "xxxx"); Httpget get = new httpget (geturl ()); Sentoken (Get); getInfo (); }} 4. При успешной отправке будет соответствующий вывод журнала
Сина (последняя строка журнала):
2078 отладка [2013-03-14 16:35:29] {"create_at": "Чт 14 марта 16:35:30 +0800 2013 "," ID ": 3555791132949940," MID ":" 3555791132949940 "," idstr ":" 3555791132949940 "," Текст ":" Тест "," Источник ":" ...
Teng Xun:
Флаг журнала для успешного входа в систему:
ptuicb ('0', '0', 'https: //open.t.qq.com/cgi-bin/oauth2/authorize? client_id = 801216331 & response_type = code & redirect_uri = http:', '1', «Log Insuctermy Insecual!
Qhttpclient httpget [3] response = {"data": {"birth_day": 26, "rower_month": 8, "birth_year": 2011, "city_code": "2", "comp": null, "country_code": "1", "edu": null "," exk ":", "exp": 141, ":" ... ":" ... ":": ":".
Журналы не указаны в полном объеме, но только для справки.
Скачать исходный код: http://xiazai.vevb.com/201607/yuanma/sinaandtencent(vevb.com).rar
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.