【问题标题】:OKHttp connection failed when I use sync使用同步时 OKHttp 连接失败
【发布时间】:2015-10-01 13:37:28
【问题描述】:

当我使用同步连接到 HTTPS 服务器时,我得到了 SSLHandshakeException。如果我对同一个 url 使用异步连接,我无法得到两个不同的答案:

案例 1:如果我直接从主线程调用异步请求,我会得到一个 403 禁止和空响应正文。

案例 2:如果我从 main 调用的 AsyncTask 调用异步请求,我会得到 200 和我期望的正确响应正文。

所以我的问题是,为什么同步请求会失败,为什么我必须通过 AsyncTask 调用异步请求才能得到预期的答案?

更新 看起来在 AsyncTask 中调用同步请求的问题是 OKHttp 客户端的身份验证器没有完成设置身份验证器,因此我收到了握手异常。

最后更新 让它工作。重构了发布字符串。从获取地图的 toString 到创建 JSONObject。不知何故,授权通过了,甚至没有必要增加超时。

【问题讨论】:

  • 你遇到了什么错误?

标签: android https android-asynctask okhttp


【解决方案1】:

据我了解,问题在于从主线程发出请求。 如果您阅读:
How to fix android.os.NetworkOnMainThreadException?
你会明白你不能从 Ui 线程发出网络请求(我认为是 Api 11)。
编辑
检查谷歌页面:
http://developer.android.com/training/basics/network-ops/connecting.html
编辑 2
如果请求是异步的,例如使用 OKHttp 异步方式,那么问题可能来自你有一个小的超时,我通常将它设置为 3-5 秒(我有这个问题)。

【讨论】:

  • 网络请求应该在异步任务上完成,而不是在主线程上——这确实是错误的。你可以在谷歌文档上阅读。
  • 我不确定您是否了解 OKHTTP 库提供的异步请求。
  • 不错的镜头。好吧,异步方式没有问题。但我希望它从异步任务内部进行同步,然后超时提示不起作用,即使将超时设置为 1 分钟也无济于事。
  • 对我来说超时有效。如果想到另一件事,我会更新。你使用证书吗?
  • 是的,使用证书,并设置为仅一种加密。实际上,我得到了它的工作。重构了发帖方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
相关资源
最近更新 更多