Мое приложение выполняет HTTP POSTS, в общем приложение работает, но у меня возникают проблемы с файлами cookie. Мой код, похоже, отлично передает файлы cookie через переменную HttpClient и out, но результаты POST показывают, что мое приложение (как клиент) ничего не помнит. (Когда я использую webbroswer в своем компьютере, он отлично работает, куки помнят мое имя) Кроме того, если приложение перезагружается, файлы cookie исчезают (... но сначала что-то в первую очередь)Android игнорирует файлы cookie в моем HTTP-сообщении
Это мой код:
static DefaultHttpClient httpclient;
static HttpPost httppost;
static CookieStore cookiestore;
new Thread(new Runnable() {
public void run() {
String URI_FOR_DOMAIN="http://chatbot.t.com/cgi-bin/elbot.cgi";
httppost = new HttpPost(URI_FOR_DOMAIN);
try {
HttpResponse resp = httpclient.execute(httppost);
} catch (IOException e) {
e.printStackTrace();
}
cookiestore = ((DefaultHttpClient) httpclient).getCookieStore();
List<Cookie> list = cookiestore.getCookies();
app.logy("COOKIE STORE 1: " + cookiestore.toString());
app.logy("COOKIE LIST 1: "+list.toString());
for (int i=0;i<list.size();i++) {
Cookie cookie = list.get(i);
app.logy("COOKIE "+i+": "+cookie.toString());
}
HttpContext context = new BasicHttpContext();
context.setAttribute( ClientContext.COOKIE_STORE, cookiestore);
httppost = new HttpPost(url);
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<>(2);
nameValuePairs.add(new BasicNameValuePair("ENTRY", userInput));
nameValuePairs.add(new BasicNameValuePair("IDENT", userIDENT));
nameValuePairs.add(new BasicNameValuePair("USERLOGID", userLOGID));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
app.logy("COOKIE STORE 2: "+cookiestore.toString());
app.logy("COOKIE CONTEXT: " + context.toString());
HttpResponse response = httpclient.execute(httppost, context);
cookiestore = ((DefaultHttpClient) httpclient).getCookieStore();
List<Cookie> list2 = cookiestore.getCookies();
app.logy("COOKIE STORE 2: " + cookiestore.toString());
app.logy("COOKIE LIST 2: "+list2.toString());
for (int i=0;i<list2.size();i++) {
Cookie cookie = list2.get(i);
app.logy("COOKIE2 i="+i+": "+cookie.toString());
}
HttpEntity entity = response.getEntity();
}
}
app.logy(sb.toString());
}
catch (IOException e) { e.printStackTrace(); }
catch (Exception e) { e.printStackTrace(); }
} catch (ClientProtocolException e) {
app.logy("HttpPOST (ClientProtocol) error: "+e);
} catch (IOException e) {
app.logy("HttpPOST (I/O) error: "+e);
}
}
}).start();
Это значения, которые отражены в Logcats из приведенного выше кода. Печеньки, кажется, есть, но HttpResponse response = httpclient.execute (httppost, context); кажется, игнорирует их.
COOKIE STORE 2: [[version: 0][name: cookie_user_name][value: Albert][domain: elbot-e.artificial-solutions.com][path: /][expiry: Thu Oct 08 22:26:54 GMT+02:00 2015]]
COOKIE LIST 2: [[version: 0][name: cookie_user_name][value: Albert][domain: elbot-e.artificial-solutions.com][path: /][expiry: Thu Oct 08 22:26:54 GMT+02:00 2015]]
COOKIE2 i=0: [version: 0][name: cookie_user_name][value: Albert][domain: elbot-e.artificial-solutions.com][path: /][expiry: Thu Oct 08 22:26:54 GMT+02:00 2015]
В моем нынешнем подходе я разворачивать response.getEntity() и извлечь весь HTML строку из веба-страницы URL. Могу ли я сделать то же самое с предложенным вами методом HrrpUrlConnection? – Josh
Я не понимаю, почему нет. Существует ответ get() из httpUrlConnection, поэтому я уверен, что это тот же объект ответа, который вы используете. – cj1098
Спасибо, я попробую и вернусь – Josh