2010-03-29 86 views
1

当没有防火墙时,标准getUrlContent可以正常工作。但是当我尝试在防火墙后面进行操作时,我遇到了异常情况。Android:无法在防火墙后面进行httprequest

我试图在AVD管理器中设置“http代理服务器”,但它没有工作。任何想法如何正确设置它?

and btw:from android documentation“您可以使用-verbose-proxy选项来诊断代理连接问题。” -verbose-proxy根本不是一个有效的选项。

protected static synchronized String getUrlContent(String url) throws ApiException { 
    if(url.equals("try")){ 
     return "thanks"; 

    } 
    if (sUserAgent == null) { 
     throw new ApiException("User-Agent string must be prepared"); 
    } 

    // Create client and set our specific user-agent string 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(url); 
    request.setHeader("User-Agent", sUserAgent); 

    try { 
     HttpResponse response = client.execute(request); 

     // Check if server response is valid 
     StatusLine status = response.getStatusLine(); 
     if (status.getStatusCode() != HTTP_STATUS_OK) { 
      throw new ApiException("Invalid response from server: " + 
        status.toString()); 
     } 

     // Pull content stream from response 
     HttpEntity entity = response.getEntity(); 
     InputStream inputStream = entity.getContent(); 

     ByteArrayOutputStream content = new ByteArrayOutputStream(); 

     // Read response into a buffered stream 
     int readBytes = 0; 
     while ((readBytes = inputStream.read(sBuffer)) != -1) { 
      content.write(sBuffer, 0, readBytes); 
     } 

     // Return result from buffered stream 
     return new String(content.toByteArray()); 
    } catch (IOException e) { 
     throw new ApiException("Problem communicating with API", e); 
    } 
} 

回答

0

看看这个小野兽会帮助你。这可能是您在运行的模拟器映像中需要的。

http://openhandsetmagazine.com/2007/11/tips-howto-connect-android-emulator-behind-proxy/

+0

我在windows下,我甚至找不到/data/data/com.google.android.providers.settings/databases/settings.db位置。文件位于何处? – Yang 2010-03-29 17:42:55

+0

好吧,你需要进入模拟图像的“壳”。 http://developer.android.com/guide/developing/tools/adb.html#shellcommands 这应该让你在那里为你所需要的。 – 2010-03-29 19:55:23

5

您可以在代码中设置代理了。

public void setProxy(DefaultHttpClient httpclient) { 
      final String PROXY_IP = "<insert your IP here>"; 
      final int PROXY_PORT = <insert_PROXY_PORT#>; 

      httpclient.getCredentialsProvider().setCredentials( 
        new AuthScope(PROXY_IP, PROXY_PORT), 
        new UsernamePasswordCredentials( 
          "username", "password")); 

      HttpHost proxy = new HttpHost(PROXY_IP, PROXY_PORT); 

      httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, 
        proxy); 


     }