根據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