模拟登录获取新浪微博的access_token

来源:互联网 发布:知乎奶酪陷阱白仁荷 编辑:程序博客网 时间:2024/04/29 08:25
public static AccessToken refreshToken(){
                 Properties props = new Properties();
                 try {
                         props.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("sina_account.properties"));
                         String url = props.getProperty("url");/*模拟登录的地址,https://api.weibo.com/oauth2/authorize*/
                         PostMethod postMethod = new PostMethod(url);
                         postMethod.addParameter("client_id", props.getProperty("client_id"));//your client id
                         postMethod.addParameter("redirect_uri", props.getProperty("redirect_uri"));//your url
                         postMethod.addParameter("userId", props.getProperty("userId"));//需要获取微薄的use id
                         postMethod.addParameter("passwd", props.getProperty("passwd"));
                         postMethod.addParameter("isLoginSina", "0");
                         postMethod.addParameter("action", "submit");
                         postMethod.addParameter("response_type", props.getProperty("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?client_id=your_client_id&redirect_uri=your_redirect_url&from=sina&response_type=code"));//伪造referer
                         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();
                         if(status != 302){
                                 LOG.error("refresh token failed");
                                 return null;
                         }
                         Header location = 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){
                                                         AccessToken token = oauth.getAccessTokenByCode(code);
                                                         Oauth oauth = new Oauth();
                                                         return token;
                                         }
                                 }
                         }
                 } catch (FileNotFoundException e) {
                         LOG.error("error" + e);
                 } catch (IOException e) {
                         LOG.error("error" + e);
                 }
                 LOG.error("refresh token failed");
                 return null;
         }
原创粉丝点击