2010-07-01 67 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