HttpUrlConnection Java x Android - PullRequest
       3

HttpUrlConnection Java x Android

0 голосов
/ 28 января 2012

У меня этот код реализован в обычном Java-классе и Android.

public static String getURLPage(String urlString){
    URL url;
    String ret = "";
    try {
        url = new URL(urlString);

        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        InputStream response = urlConnection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                response));
        for (String line; (line = reader.readLine()) != null;) {
            ret += line;
        }
        reader.close();
        return ret;
    } catch (Exception e) {

        return e.getLocalizedMessage();
    }
}

Код правильно возвращает страницу в Java, но в Android возвращает код ошибки 403 ...

Я пытался установить User-Agent, но ничего не изменилось ..

В чем проблема?

1 Ответ

0 голосов
/ 28 января 2012

// edit (извините, я впервые прочитал ошибку 403)

отсоединенный от вашей проблемы с ошибкой 403, вы можете использовать HTTP-библиотеку Apache , которая включенав Android.У вас более приятный API, чем у java.net.HttpURLConnection

Вот пример

    // imports from org.apache.http (http://hc.apache.org)
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.params.HttpParams;
    import org.apache.http.util.EntityUtils;
    import org.apache.http.client.HttpClient;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.HttpStatus;

    int TIMEOUT = 2000;
    String url= "http://your-url.com;
    HttpParams httpParameters = new BasicHttpParams();
    // Set the timeout in milliseconds until a connection is established.
    HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT);
    HttpClient hc = new DefaultHttpClient(httpParameters);

    // which HTTP request: GET or POST ?
    //HttpPost post = new HttpPost(url);
    HttpGet get = new HttpGet(url);

    HttpResponse rp = hc.execute(get);
    // example to show the result as a string
    String resultAsString= EntityUtils.toString(rp.getEntity());

Это не помогает напрямую, но в его комментарии правильно входит.Вы должны посмотреть заголовки, когда он работает (с Java) и сравнить их, когда вы используете Android.Параметры, которые вы получаете с помощью этой команды:

    HttpResponse rp = hc.execute(get);
    // compare the headerParams
    Header[] requestHeader = get.getAllHeaders();
    Header[] responseHeader = rp.getAllHeaders();
...