【问题标题】:httpget not working past "execute"httpget 在“执行”之后无法工作
【发布时间】:2011-08-08 07:30:02
【问题描述】:

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

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 "";

        }
    }

【问题讨论】:

  • e.printStackTrace() 打印什么?大多数情况下,异常消息表明出了什么问题。
  • responseHandler 被导入 import org.apache.http.client.ResponseHandler; e 具有值 javax.net.ssl.SSLException: 不受信任的服务器证书。谢谢

标签: java android json http-get


【解决方案1】:

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

参考:Disabling Certificate Validation in an HTTP Connection

【讨论】:

  • 我尝试禁用证书验证,但它仍然给我同样的错误。作为旁注,当我在网站上输入内容时,我没有收到任何弹出窗口
  • 真的,不要再告诉人们禁用 SSL 验证了。这是一个非常糟糕的主意:如果你不能确定你在和谁说话,那么使用加密是没有意义的。
  • 但他也可以相应地更新证书以便识别 SSL。对于开发服务器,我想禁用 SSL 验证是可以的,你说呢?
  • 也许这只是我的防病毒故障,但是您发布的链接下的网站有病毒。
  • 引用的 URL 似乎没有转到有效的站点。
【解决方案2】:

您绝对应该提供堆栈跟踪以确保,但很可能您的手机不信任颁发 iphone-radar.com 的 SSL 证书的 CA:CN=GeoTrust Global CA、O=GeoTrust Inc.、C=US。 (它不在 Gingerbread 的信任库中)

搜索 SO 以查找如何将此证书添加到您的信任库,有多个关于此的帖子。

【讨论】:

  • 如何查看需要添加的证书。谢谢
  • 用您的浏览器打开网站并点击状态栏上的挂锁图标(IE 和 Chrome)。查找颁发 CA,Geo Trust Global CA。您可以从 GeoTrust 的资源页面下载(并验证指纹匹配):geotrust.com/resources/root-certificates
猜你喜欢
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 2019-05-30
相关资源
最近更新 更多