2010-07-01 66 views
2

我正在下載一個網頁,然後使用正則表達式提取一些數據,使用正則表達式(不要大叫我,我知道一個合適的解析器會更好,但這是一個非常簡單的機器生成的頁面)。這在模擬器中正常工作,在使用wi-fi連接時在我的手機上工作良好,但在3G上不起作用 - 返回的字符串不一樣,我也沒有匹配。我可以想象它與數據包大小或延遲有關,但我無法弄清楚。使用Android下載網頁

我的代碼:

public static String getPage(URL url) throws IOException { 
    final URLConnection connection = url.openConnection(); 
    HttpGet httpRequest = null; 

    try { 
     httpRequest = new HttpGet(url.toURI()); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 

    HttpClient httpclient = new DefaultHttpClient(); 
    HttpResponse response = (HttpResponse) httpclient.execute(httpRequest); 

    HttpEntity entity = response.getEntity(); 
    BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity); 
    InputStream stream = bufHttpEntity.getContent(); 

    String ct = connection.getContentType(); 

    final BufferedReader reader; 

    if (ct.indexOf("charset=") != -1) { 
     ct = ct.substring(ct.indexOf("charset=") + 8); 
     reader = new BufferedReader(new InputStreamReader(stream, ct)); 
    }else { 
     reader = new BufferedReader(new InputStreamReader(stream)); 
    } 

    final StringBuilder sb = new StringBuilder(); 

    String line; 
    while ((line = reader.readLine()) != null) { 
     sb.append(line); 
    } 

    stream.close(); 
    return sb.toString(); 
} 

這是我造成這種連接不良,或者是有一個錯誤在那裏?無論哪種方式,我該如何解決它?


更新: 下載超過3G的文件是一個比通過Wi-Fi更小的201個字節。雖然他們顯然都在下載正確的頁面,但3G卻缺少一大堆空白,還有一些HTML註釋出現在原始頁面中,我覺得有點奇怪。 3G在3G上採用不同的頁面來減少文件大小?

+0

您是否嘗試過比較通過3G下載的內容與以其他方式下載的內容?他們有什麼不同? – pkaeding 2010-07-01 14:12:22

+0

經過許多麻煩,我設法從設備上獲取文件 - 查看更新後的問題。 – blork 2010-07-01 14:37:28

+0

無關的問題,你在這裏不必要地解僱兩個請求。一個使用'URL#openConnection()',另一個使用'HttpClient#execute()'。擺脫'URL#openConnection()'行並繼續使用'HttpClient'。 'HttpResponse'類有一個'getHeaders()'方法。使用它來獲取「Content-Type」標題。 – BalusC 2010-07-01 14:43:51

回答

0

在這裏你去一些提示,他們中的一些愚蠢的提示,但以防萬一:

  1. 查看您的移動連接,嘗試打開網頁瀏覽器,瀏覽網頁,並確保它的實際工作
  2. 我不知道哪個網頁是您嘗試訪問的網頁,但要考慮到取決於您的手機用戶代理(UA),呈現的內容可能不同(專門爲手機設計的網頁),或者甚至不能完全呈現內容。它是你自己的網頁嗎?
  3. 嘗試從Firefox訪問相同的網頁,更改UA(使用Firefox的用戶代理切換器)並查看返回的代碼。

這將是一個很好的起點,以弄清楚什麼是你的問題

GER

0

您可能要檢查如果您的提供商在3G與地方透明代理。

1

如果您使用3G或WiFi訪問網頁,UserAgent(UA)不應該更改。 由於這是前面提到的,擺脫的URLConnection的,導致明顯的代碼是完全使用了HTTPClient方法,你可以使用設置UA:

httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, userAgent); 

最後one..it可能是愚蠢的,但也許網頁是動態的?!那可能嗎?

+0

這對我的問題不希望下載移動版本的網站 HttpClient client = new DefaultHttpClient(); \t \t \t client.getParams()。setParameter(CoreProtocolPNames.USER_AGENT,「Mozilla/5.0(Windows NT 6.2; WOW64; rv:22.0)Gecko/20100101 Firefox/22.0」); – 2013-07-06 07:01:25

+0

很高興幫助你:) – Ewoks 2013-07-06 21:57:38