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. 【距离GDOI:137天】 扩展KMP...字符串QAQ

    上次和黄神两人一合计,干脆我学字符串他学图论,然后两人相互教...但以蒟蒻最近这状态来看,估计会到时候也教不了QAQ 扩展KMP大概是下面这个课件讲的这样 http://wenku.baidu.com ...

  2. HDFS设计思想

    HDFS设计思想 DataNode:用来在磁盘上存储数据 HDFS  数据存储单元( block ) 1 文件被切分成固定大小的数据block块 •默认数据块大小为 64MB(hadoop1.x版本6 ...

  3. Databus架构分析与初步实践

    简介 Databus是一个低延迟.可靠的.支持事务的.保持一致性的数据变更抓取系统.由LinkedIn于2013年开源.Databus通过挖掘数据库日志的方式,将数据库变更实时.可靠的从数据库拉取出来 ...

  4. 移动端页面a input去除点击效果及pc端切换

    1 手机端页面a button input去除点击效果以及闪屏问题 添加: a, button, input { -webkit-tap-highlight-color: rgba(255, 0, 0 ...

  5. 【07】node 之 Buffer

    1.1.  Buffer基本概念 JavaScript 语言自身只有字符串数据类型,没有二进制数据类型.二进制可以存储电脑中任何数据(比如:一段文本.一张图片.一个硬盘,应该说电脑中所有的数据都是二进 ...

  6. codeforce div2 426 D. The Bakery

    D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...

  7. 洛谷 P1362 兔子数

    题目描述 设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4.如果一个正整数满足 S(x*x) = S(x) *S(x),我们称之为 ...

  8. UBUNTU命令行下进程查看-终止

    ps ax   显示当前系统进程的列表 ps aux 显示当前系统进程详细列表以及进程用户 如果输出过长,可能添加管道命令 less  如  ps ax|less 查看具体进程,使用 grep命令如  ...

  9. Windows下C++多线程同步与互斥简单运用(转)

    1.  互斥量,Mutex #include <Windows.h> #include <iostream> using namespace std; DWORD WINAPI ...

  10. 測試 電池溫度的 batch file

    無限迴圈, 執行讀取 電池溫度, @echo off adb root :loop echo %date% %time% adb shell "cat /sys/class/power_su ...