Android: невозможно сделать httprequest за брандмауэром - PullRequest
1 голос
/ 29 марта 2010

Стандартный getUrlContent хорошо работает, когда нет брандмауэра. Но у меня есть исключения, когда я пытаюсь сделать это за брандмауэром.

Я пытался установить http прокси-сервер в AVD Manager, но это не сработало. Есть идеи как правильно его настроить?

и btw: из документации Android «Вы можете использовать опцию -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);
    }
}

Ответы [ 2 ]

5 голосов
/ 30 марта 2010

Вы также можете установить прокси в своем коде.

   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);  


       }  
0 голосов
/ 29 марта 2010

Посмотри, поможет ли тебе эта маленькая зверюшка. Возможно, вам это нужно в образе эмулятора, который вы используете.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...