2011-08-08 24 views
1

我的程序应该去一个网站,并根据id(4e3f2c6659f25a0f8400000b),它会得到一个JSON字符串。出于某种原因,该程序不会通过client.execute行并引发IOException。此功能适用于需要从网站提取信息的其他程序。如果你去https://iphone-radar.com/accounts/4e3f2c6659f25a0f8400000b你可以看到我想要复制的行的类型。这是我的代码,我希望你能帮我找出为什么会发生这种情况。谢谢。httpget不工作过去“执行”

public String getText(String uri) { 
     HttpClient client1 = new DefaultHttpClient(); 
     HttpGet request = new HttpGet("https://iphone-radar.com/accounts/4e3f2c6659f25a0f8400000b"); 

     ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
     try { 
      String response_str = client1.execute(request, responseHandler); 
      return response_str; 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return ""; 

     } 
    } 
+1

又是什么e.printStackTrace()打印?大多数情况下,这个例外的信息表明发生了什么问题。 –

+0

responseHandler的代码? – PravinCG

+0

responseHandler是导入导入的org.apache.http.client.ResponseHandler; e的值为javax.net.ssl.SSLException:不受信任的服务器证书。谢谢 – Sean

回答

0

看起来这个例外是关于不受信任的证书。当您尝试访问带有过期证书的HTTPS或自签名证书时,会发生这种情况。在浏览器中,弹出窗口会显示询问我们是否信任。在应用程序的过程中,我们需要添加一些代码来忽略不可信的SSL证书,或者更新JVM证书以便识别证书。

参考:Disabling Certificate Validation in an HTTP Connection

+0

我试过禁用证书验证,但它仍然给我同样的错误。作为一个侧面说明,当我在网站上输入时,我收不到弹出窗口 – Sean

+0

真的很帅,不要告诉人们禁用SSL验证。这是一个非常糟糕的主意:如果您无法确定您正在与谁通话,那么使用加密就没有意义。 –

+0

但他也可以相应地更新证书,以便识别SSL。对于开发服务器,我想可以禁用SSL验证,你说什么? – 2011-08-09 05:00:55

0

你一定要提供堆栈跟踪可以肯定的,但最有可能你的手机不信任颁发iphone-radar.com的SSL证书的CA:CN = GeoTrust的全球CA,O = GeoTrust的公司, C = US。 (这不是在姜饼的信任店)

搜索所以要找到如何将这个证书添加到您的信任存储,有关于此的多个职位。

+0

如何检查我需要添加哪个证书。谢谢 – Sean

+0

使用浏览器打开网站,然后点击状态栏上的挂锁图标(IE和Chrome)。寻找签发CA,Geo Trust Global CA.您可以从GeoTrust的资源页面下载(并验证指纹匹配):http://www.geotrust.com/resources/root-certificates/ –