根据Google的建议,我为我的api-level 15项目使用HttpsURLConnection。HttpsURLConnection server_name已损坏(?)超过3g
我的测试用例是很简单的:
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的代理地址。
我已经抛弃了两个请求的'客户端Hello'数据包,并且握手协议/扩展名:server_name字段包含wifi请求的目标主机名(myserver.com),但包含3g请求的APN代理地址。
是这样的:
- 东西我有编码错误
- 的东西,我有我的手机上配置不正确(三星Galaxy S3)
- 的东西,我有我的服务器
- 邪恶的东西上配置不正确我的移动服务提供商正在做
- Android库中的一个错误
我的服务器正在使用这个虚拟主机的专用IP地址。
我可以使用DefaultHttpClient的一个简单的子类成功地发出超过3g的请求,但由于我的最小API级别是15,我希望能够沿着'首选'路径行进。
任何建议将非常好的收到。我花了太多时间试图让这个基本的东西工作。
我的同事正在处理这个项目的iPhone开发,因为他的代码“开箱即用”而摇头。
您应该检查代理是否真的需要使用APN。查看您手机的APN配置。 – Robert 2012-08-07 10:55:33
谢谢罗伯特。哇。当我第一次插入SIM时,我使用了默认的APN(我假设)。 3g以上的所有其他互联网接入工作正常。我发现了一个没有代理设置的替代APN,我的代码现在可以工作了!但是,这对我的应用程序的潜在用户来说意味着什么?如果一个运营商_requires_(?)一个代理,那么呢?有什么方法可以绕过我的代码或补偿代理中的代理? – Horrendo 2012-08-07 11:14:05
在欧洲,使用预配置代理的提供商很少。即使他们使用代理,代理通常也应该使用不改变任何内容的HTTPS传递。因此,我认为这种情况应该只发生很少。 – Robert 2012-08-07 11:25:47