按照Google的建议,我在api级15项目中使用HttpsURLConnection。

我的测试用例非常简单:

URL url = new URL(STATS);
HttpsURLConnection we = (HttpsURLConnection)url.openConnection();
InputStream in = new BufferedInputStream(we.getInputStream());


当我通过WiFi连接到服务器时,一切正常。

通过3g连接到服务器时,Apache日志中出现错误:

Hostname 202.139.83.152 provided via SNI and hostname myserver.com provided via HTTP are different


现在202.139.83.152地址是我的移动提供商APN的代理地址。

我已转出两个请求的“客户端问候”数据包,并且“握手协议/扩展名:服务器名称”字段包含wifi请求的目标主机名(myserver.com),但包含3g请求的APN代理地址。

这是 :


我编码错误
我在手机上配置错误的某些东西(三星Galaxy S3)
我在服务器上配置不正确的内容
我的移动服务提供商正在做的一件坏事
Android库中的错误


我的服务器为此虚拟主机使用了专用的IP地址。

我可以使用DefaultHttpClient的简单子类在3g上成功发出请求,但是由于我的最低API级别为15,所以我希望沿“首选”路径走。

任何建议都将得到极大的欢迎。我花了太多时间尝试使此基本功能正常运行。

我正在为该项目进行iPhone开发的同事摇了摇头,因为他的代码“开箱即用”。

最佳答案

事实证明,这是一个known issue

尽管我不确定它是否强大,但我找到了一种解决方法。到目前为止,对我有用的是在建立连接时禁用代理:

HttpsURLConnection http = (HttpsURLConnection) url.openConnection(Proxy.NO_PROXY);


我希望这可以帮助别人。

关于android - HttpsURLConnection server_name超过3g损坏(?),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11844044/

10-12 04:56