(Android) Проблемы с cookie в HttpClient, URL и HttpURLConnection

0

Я собираюсь добавить подтверждение captcha в регистрационную форму в приложениях для Android. Но я обнаружил, что сервер дает мне сигнал, что сеанса нет. Наконец, я обнаружил, что файл cookie моего приложения ничего не хранит.

Изображение 174551

Я не могу зарегистрировать аккаунт, даже если проверка правильна. Я уверен, что на моем php-сервере нет проблем, потому что я тестировал это в браузере.

Я сделал три типа подключения для проверки проблемы с файлом cookie.

1) HttpClient

HttpResponse response = httpclient.execute(httppost);

2) URL

Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://www.example.com/abc.png").getContent());

3) HttpURLConnection

private void send_post(HttpURLConnection connection,String variable_set) throws Exception
{
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setInstanceFollowRedirects(false); 
    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    connection.setRequestProperty("charset", "utf-8");
    connection.setRequestProperty("Content-Length", "" + Integer.toString(variable_set.getBytes().length));
    connection.setUseCaches(false);

    DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
    wr.writeBytes(variable_set);
    wr.flush();
    wr.close();
}

Кроме того, я добавляю этот код для настройки cookie.

CookieManager cookieManager = new CookieManager();  
    CookieHandler.setDefault(cookieManager);

К сожалению, только успехи HttpURLConnection для использования файлов cookie и серверов показывают некоторые переменные сеанса. Тем не менее, мое приложение в основном использует URL и HttpClient.

Может ли кто-нибудь сказать мне, как включить cookie в HttpClient и URL?

Теги:
cookies
captcha

1 ответ

0

Вот пример кода для установки JSESSIONID (сервера Apache Tomcat) в качестве файла cookie в Android. Надеюсь, это даст вам некоторую идею для создания аналогичного процесса в PHP:

DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.setCookieStore(new BasicCookieStore());
BasicClientCookie cookie = new BasicClientCookie("JSESSIONID<<or your variable name>>", <<ACTUAL VALUE>>);
cookie.setDomain(<<SET YOUR DOMAIN NAME HERE>>);
cookie.setPath("/");
httpClient.getCookieStore().addCookie(cookie);
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;
// Checking http request method type
if (method == POST) {
    HttpPost httpPost = new HttpPost(url);
    httpPost.setHeader("Accept", "application/json"); //use text/plain if response if HTTP response is plain text
    httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");                
    if (formData != null) {
        httpPost.setEntity(new UrlEncodedFormEntity(formData, HTTP.UTF_8));
    }
    httpResponse = httpClient.execute(httpPost);
} else if (method == GET) {
    if (formData != null) {
        String paramString = URLEncodedUtils.format(formData, "utf-8");
        url += "?" + paramString;
    }
    HttpGet httpGet = new HttpGet(url);
    httpResponse = httpClient.execute(httpGet);
}

status_code = httpResponse.getStatusLine().getStatusCode();
httpEntity = httpResponse.getEntity();
Log.i("Status Code After Login", "> >status code > >" + status_code + "> >url > >"+url);
if(status_code==200)
    response = EntityUtils.toString(httpEntity);
else
    response="fail";

<<response will contain the final HTTP response>>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню