Как я делаю запрос HTTP с помощью cookie на Android?

Вам нужен абстрактный метод в абстрактном классе. Это заставит дочерний класс реализовать метод.

abstract class A {


abstract function a() {}

}

class B extends A {

function a () {


// write your code here.
}
}
116
задан emmby 24 March 2009 в 18:31
поделиться

2 ответа

Оказывается, что Google Android поставлется с Apache HttpClient 4.0, и я смог выяснить, как сделать это с помощью "Основанного на форме входа в систему" пример в документах HttpClient:

http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientFormLogin.java


import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

/**
 * A example that demonstrates how HttpClient APIs can be used to perform
 * form-based logon.
 */
public class ClientFormLogin {

    public static void main(String[] args) throws Exception {

        DefaultHttpClient httpclient = new DefaultHttpClient();

        HttpGet httpget = new HttpGet("https://portal.sun.com/portal/dt");

        HttpResponse response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();

        System.out.println("Login form get: " + response.getStatusLine());
        if (entity != null) {
            entity.consumeContent();
        }
        System.out.println("Initial set of cookies:");
        List<Cookie> cookies = httpclient.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            System.out.println("None");
        } else {
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("- " + cookies.get(i).toString());
            }
        }

        HttpPost httpost = new HttpPost("https://portal.sun.com/amserver/UI/Login?" +
                "org=self_registered_users&" +
                "goto=/portal/dt&" +
                "gotoOnFail=/portal/dt?error=true");

        List <NameValuePair> nvps = new ArrayList <NameValuePair>();
        nvps.add(new BasicNameValuePair("IDToken1", "username"));
        nvps.add(new BasicNameValuePair("IDToken2", "password"));

        httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

        response = httpclient.execute(httpost);
        entity = response.getEntity();

        System.out.println("Login form get: " + response.getStatusLine());
        if (entity != null) {
            entity.consumeContent();
        }

        System.out.println("Post logon cookies:");
        cookies = httpclient.getCookieStore().getCookies();
        if (cookies.isEmpty()) {
            System.out.println("None");
        } else {
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("- " + cookies.get(i).toString());
            }
        }

        // When HttpClient instance is no longer needed, 
        // shut down the connection manager to ensure
        // immediate deallocation of all system resources
        httpclient.getConnectionManager().shutdown();        
    }
}
91
ответ дан emmby 24 November 2019 в 02:18
поделиться

Я не работаю с Google Android, но я думаю, что Вы найдете дело не в этом трудно для получения этой работы. При чтении соответствующего бита учебного руководства Java, Вы будете видеть, что зарегистрированный cookiehandler получает обратные вызовы из кода HTTP.

Таким образом, если нет никакого значения по умолчанию (имейте Вас, проверил если CookieHandler.getDefault() действительно является пустым?) затем можно просто расширить CookieHandler, реализация помещала/получала и заставляет его работать в значительной степени автоматически. Обязательно рассмотрите параллельный доступ и т.п., если Вы идете тем путем.

править: Очевидно, необходимо было бы установить экземпляр пользовательской реализации как обработчик по умолчанию через CookieHandler.setDefault() получить обратные вызовы. Забыл упоминать это.

1
ответ дан wds 24 November 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: