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_HANDLERnew 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();
            }
      }

HttpClient 模拟登录搜狐微博的更多相关文章

  1. 记一次HTTPClient模拟登录获取Cookie的开发历程

    记一次HTTPClient模拟登录获取Cookie的开发历程 环境: ​ springboot : 2.7 ​ jdk: 1.8 ​ httpClient : 4.5.13 设计方案 ​ 通过新建一个 ...

  2. .Net HttpClient 模拟登录微信公众平台发送消息

    1.模拟登录 public WeiXinRetInfo ExecLogin(string name, string pass) { CookieContainer cc = new CookieCon ...

  3. HttpClient 模拟登录网易微博

          实现核心:代码执行流程,根据抓包工具,模拟浏览器请求步骤走       private static void testLogin()       {             try    ...

  4. HttpClient + Jsoup模拟登录教务处并获取课表

    1.概述 最近想做一个校园助手类的APP,由于第一次做,所以打算先把每个功能单独实现,防止乱了阵脚.利用教务处登录获取课表和成绩等是一个基本功能,所以以获取课表为例实现了这个功能.完整代码点这里,尝试 ...

  5. Java通过httpclient获取cookie模拟登录

    package Step1; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.Htt ...

  6. Java语言使用HttpClient模拟浏览器登录

    使用HttpClient来模拟浏览器登录网站,然后可以进行操作,比如发布信息等 第一步:获取实际的post网址,(不考虑复杂情况下) 1.需要使用到firefox的httpfox插件,httpfox中 ...

  7. Android利用HttpURLConnection实现模拟登录

    最近在做一个APP,需要模拟登录教务处,之前曾经用HttpClient做过,点这里,但是发现最新的Android SDK已经不支持Httpclient了,所以只好在琢磨一下HttpURLConnect ...

  8. httpclient模拟浏览器get\post

    一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等.所访问的这些页面有的仅 仅是一些普通的页面,有的需要用户登录后方可使用,或者需 ...

  9. Java模拟登录系统抓取内容【转载】

    没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下....     为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...

随机推荐

  1. BZOJ-2618 [CQOI2006]凸多边形

    半平面交模版题.. #include <cstdlib> #include <cstdio> #include <cmath> #include <cstri ...

  2. [SDOI2010][bzoj1927] 星际竞速 [最小路径覆盖+费用流]

    题面 传送门 思路 仔细观察题目要求的东西,发现就是求一个最小路径覆盖,只不过可以跳跃(就是那个鬼畜的超级跳跃) 那么就直接上最小路径覆盖模版 对每个点,拆成两个点$X_i$和$Y_i$,建立超级源超 ...

  3. [SDOI2009][bzoj1877] 晨跑 [费用流]

    题面: 传送门 思路: 一个点只能走一回,路径不能相交...... 显然可以转化为网络流的决策来做 我们构建一个网络,令其最大流等于最大的跑步天数即可 怎么构造呢? 对于每个点只能走一次的限制,可以考 ...

  4. OpenJudge 2971 抓住那头牛

    总时间限制:  2000ms 内存限制:  65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0< ...

  5. 如何查看用pip命令安装的软件的安装路径

    怎么查看python的pip install xx安装的软件的安装路径? pip freeze命令可以查看用pip安装的软件有哪些 要查看安装路径,在执行一次命令pip install xx,就会告诉 ...

  6. hdu 3061 hdu 3996 最大权闭合图 最后一斩

    hdu 3061 Battle :一看就是明显的最大权闭合图了,水提......SB题也不说边数多少....因为开始时候数组开小了,WA....后来一气之下,开到100W,A了.. hdu3996. ...

  7. android 集成友盟分享之后,想自定义分享面板的看过来

    第一种情况 首先上传一张默认的友盟分享的效果图 看起来还不错,但是总是有这样那样的原因,需要我们对默认效果做出一些改变. 第二种情况 如果你想做出下面的效果: 或者这样的效果 : 总之上面的效果总是在 ...

  8. querySelector和getElementById之间的区别

    一.概述 今天在看js的时候发现里面的代码基本上都是用querySelector()和querySelectorAll()来获取元素,就有点疑惑为什么不用getElementById(),可能也是因为 ...

  9. HNOI 2006 BZOJ 1195 最短母串

    题面 问题描述 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,„,Sn)都是T的子串. 输入 第一行是一个正整数n(n<=12),表示给定的字 ...

  10. 打开与关闭eclipse的自动补全功能

    打开: eclipse→Windows→Preferences→Java→Editor→Content Assist:修改Auto Activation triggers for java的值为:.a ...