zoukankan      html  css  js  c++  java
  • HttpClient 模拟登录搜狐微博

    http://mengyang.iteye.com/blog/575671
    第一次遇到一个这样的问题,"PKIX path building failed" 异常
     
     
    大概意思是,证书出问题了,服务器不信任我们自己创建的证书。
    两种解决方法
         1.请求时添加代码忽略证书信任问题
              我用httpClient,简单明了的两句代码(支持SSL,也就是以https://开头的,一般是http://)
                      Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory(), 443);
                      Protocol.registerProtocol("https", myhttps);
         2.代码控制证书生成,导入,再请求
     
     
    成功例子:
          private static void testLogin()
          {
                try
                {
                      String callback_url = "http://www.wedfvd.com";
                      
                      TSohu tsohu = new TSohu(AConstants.TSOHU_APP_KEY,AConstants.TSOHU_APP_KEY_SECRET);
                      
                      TSohuOAuthClient oc = new TSohuOAuthClient();//OAuth认证授权以及签名相关
                      TSohuOAuth requestOAuth = oc.requestToken(tsohu);
                      //hd=default&
    //                String authorizeUrl = "http://api.t.sohu.com/oauth/authorize?oauth_token="
    //                            + requestOAuth.getOauth_token() + "&oauth_callback=" + callback_url;
                      
                      HttpClient httpClient = new HttpClient();
                      
                      String loginUrl = "https://passport.sohu.com/sso/login.jsp?appid=1073&persistentcookie=1&s="+new Date().getTime()+"&b=6&w=1024&pwdtype=1&v=26";
                      loginUrl += "&userid="+URLEncoder.encode("zzzzzzzzzzzz@sohu.com", "utf-8")+"&password="+MD5Util.encrypt("123456");
                      
                      Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory(), 443);
                      Protocol.registerProtocol("https", myhttps);
                      
                      GetMethod get = new GetMethod(loginUrl);
                      int status = httpClient.executeMethod(get);
    //                System.out.println(status+" "+get.getResponseBodyAsString());
                      
                      PostMethod post = new PostMethod("http://api.t.sohu.com/oauth/authorize");
                      post.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
                      post.getParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
                      post.getParams().setParameter("http.protocol.single-cookie-header", true);
                      
                      NameValuePair[] params = new NameValuePair[]{
                                  new NameValuePair("oauth_token", requestOAuth.getOauth_token()),
                                  new NameValuePair("oauth_callback", callback_url)
                      };
                      post.setRequestBody(params);
                      
                      int statusCode = httpClient.executeMethod(post);
    //                String response = post.getResponseBodyAsString();
    //                System.out.println(statusCode+" "+response);
                      
                      if (post.getResponseHeader("Location") != null) {
                            String location = post.getResponseHeader("Location").getValue();
                            String oauthVerifier = StringUtils.substringAfter(location, "oauth_verifier=");
    //                      System.out.println(oauthVerifier);
                            
                            requestOAuth.setOauth_verifier(oauthVerifier);
                            TSohuOAuth accessOAuth = oc.accessToken(requestOAuth);
                            
                            TSohuAccessToken accessToken = new                TSohuAccessToken(accessOAuth.getOauth_token(),accessOAuth.getOauth_token_secret());
                            tsohu.setToken(accessToken);
                            
                            User user = tsohu.verify_credentials();
                            
                            accessToken.setUserid(Long.valueOf(user.getId()));
                            accessToken.setScreen_name(user.getScreenName());
                            
                            System.out.println("搜狐微博用户"+user.getScreenName()+"授权码:");
                            System.out.println("token:"+accessToken.getToken());
                            System.out.println("tokenSecret:"+accessToken.getTokenSecret());
                      } else {
                            if (statusCode != 200) {
                                  throw new RuntimeException("访问网络资源出现问题,错误码为: " + statusCode);
                            }
                      }
                } catch (Exception e)
                {
                      e.printStackTrace();
                }
          }
  • 相关阅读:
    「LOJ #6500」「雅礼集训 2018 Day2」操作
    「CEOI2013」Board
    CF407B Long Path
    poj 2503 Babelfish 用trie树做
    poj 3414 Pots搜索BFS
    POJ2001 Shortest Prefixes 用trie树实现
    poj3630Phone List用trie树实现
    poj1797Heavy Transportation最大生成树
    hoj题双重筛法
    poj1338 Ugly Numbers
  • 原文地址:https://www.cnblogs.com/svennee/p/4082981.html
Copyright © 2011-2022 走看看