当我使用与HTTPS服务器的同步连接时,我得到了SSLHandshakeException。如果我使用与同一网址的异步连接,我无法得到两个不同的答案:
案例1:如果我直接从主线程调用异步请求,我得到了一个403禁止和空响应体。
案例2:如果我从已经从main调用的AsyncTask调用异步请求,我得到了一个200和正确的响应体,我期待。
所以我的问题是,为什么同步请求失败,为什么我必须通过AsyncTask调用异步请求来获得预期的答案?
更新 看起来在AsyncTask中调用同步请求的问题是OKHttp客户端的Authenticator没有设置Authenticator,因此我得到握手异常。
最后更新 得到它的工作。重构了发布字符串。从获取地图的toString到创建JSONObject。不知何故,授权随后通过,甚至不需要增加超时。
答案 0 :(得分:3)
据我所知,问题是从主线程发出请求。
如果您阅读:
How to fix android.os.NetworkOnMainThreadException?。
您将理解您无法从Ui线程发出网络请求(因为我认为是Api 11)
的修改
检查谷歌页面:
http://developer.android.com/training/basics/network-ops/connecting.html。
编辑2
如果请求是异步的,例如使用OKHttp异步方式,那么问题可能来自于你有一个小的超时,我通常将它设置为3-5秒(我有这个问题)。