根据 Google 的建议,我将 HttpsURLConnection 用于我的 api-level 15 项目。
我的测试用例非常简单:
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 的代理地址。
我已经转储了两个请求的“Client Hello”数据包,并且 Handshake Protocol/Extension:server_name 字段包含 wifi 请求的目标主机名 (myserver.com) 但 3g 请求的 APN 代理地址。
这是 :
- 我编码错误的东西
- 我在手机上配置错误的东西(三星 Galaxy S3)
- 我在服务器上配置不正确的东西
- 我的移动提供商正在做的一些邪恶的事情
- Android 库中的一个错误
我的服务器为此虚拟主机使用专用 IP 地址。
我可以使用 DefaultHttpClient 的简单子类成功地发出超过 3g 的请求,但由于我的最低 API 级别为 15,我希望沿着“首选”路径走下去。
任何建议都会非常受欢迎。我花了太多时间试图让这个基本的东西正常工作。
我正在为这个项目处理 iPhone 开发的同事摇头,因为他的代码“开箱即用”。