Ранее я задал вопрос в Android для передачи файлов Drupal о отправке файлов cookie из моего приложения Android обратно на мой сайт Drupal, на который у меня был очень хороший ответ. Вся идея состоит в том, чтобы включить постоянное взаимодействие с сервером Client-.
Я скорректировал свой код, как было указано, но я все еще не могу правильно работать. Настройки моего кода ниже:
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
HttpResponse response;
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://testsite.com/testpoint/node/");
BasicHttpContext basicContext = new BasicHttpContext();
org.apache.http.client.CookieStore cookiestore = new BasicCookieStore();
basicContext.setAttribute(ClientContext.COOKIE_STORE, cookiestore);
basicContext.setAttribute(USERPREFERENCES.getString(COOKIE_NAME, ""), USERPREFERENCES.getString(COOKIE_VALUE, "") );
//USERPREFERENCES.getString(CO0OKIE_NAME, ""), USERPREFERENCES.getString(COOKIE_VALUE, "")
// TODO Auto-generated method stub
try{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add( new BasicNameValuePair("node[title]", "sample node from app") );
nameValuePairs.add( new BasicNameValuePair("node[type]", "story") );
nameValuePairs.add( new BasicNameValuePair("node[body]", "sample app node body content") );
httpPost.setEntity( new UrlEncodedFormEntity(nameValuePairs));
//Execute HTTP post request
//HttpResponse
response = httpClient.execute(httpPost, basicContext);
Log.i("SEEMS TO WORK", response.toString());
Log.v("CODE", httpPost.getRequestLine().toString() + " - " + response.toString());
}catch(Exception e){
Log.e("HTTP-ERROR: node creation", e.toString());
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
//Toast.makeText(getApplicationContext(), "Create Node thread returning!", Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "Testing header: Cookie: " + USERPREFERENCES.getString(COOKIE_NAME, "") +","+ USERPREFERENCES.getString(COOKIE_VALUE, ""), Toast.LENGTH_LONG).show();
}
}
В основном, имя и значение моего файла cookie хранятся в моих общих настройках USERPREFERENCES.getString(COOKIE_NAME, ") и USERPREFERENCES.getString(COOKIE_VALUE," "). Я пытаюсь отправить эту информацию обратно, так что, когда эта функция выполняет и успешно создает новую историю node на моем сайте Drupal, автор распознается как пользователь, зарегистрировавшийся и подписанный в приложении Android.
В настоящее время создается node, но пользователь является "анонимным". Следовательно, мне нужно отправить обратно информацию о файлах cookie Drupal.
Кто-нибудь может помочь мне?
Это не обязательно решение для вашей проблемы, но может быть полезно.
Когда я подхожу к таким проблемам, мне нужен способ увидеть, как выглядят заголовки запросов и из моего приложения.
Обычно я использую Charles (отличный инструмент) http://www.charlesproxy.com/. И нет, у меня нет никакой связи с компанией, это просто отличный инструмент.
Там функция Чарльза называется обратным прокси-сервером, и в основном это позволяет вам отказываться от трафика через Чарльз на ваш сервер drupal, и вы можете его проверять, когда он перетекает в ваше приложение и из него.
Используя charles, вы можете понюхать, как выглядит хороший запрос из вашего веб-браузера, а затем вы можете понюхать, как выглядят запросы вашего приложения для Android. Сравните их, и вы можете увидеть, где ваше приложение плохо формирует заголовки запросов.
Фаза отладки выглядит следующим образом:
Как только вы настроите Чарльза, дважды нажмите на свой сервер drupal и проверьте структуру запроса/ответа, который вы видите в браузере.
Затем удалите свою службу пару раз из приложения Android и обратите внимание на различия. Может быть, печенье не проходит, может быть, оно искажено, может быть, есть что-то еще в заголовках. Это позволит вам увидеть, что вам нужно для съемки, чтобы заставить Drupal принять запросы.
НЕКОТОРЫЕ ИНСТРУКЦИИ -
Обратный прокси позволит вам проверять трафик, поступающий с вашего телефона, и переходить на ваш сайт drupal (включая заголовки, чтобы вы точно видели, какие cookie отправляются). Чтобы настроить обратный прокси-сервер, вам нужно перейти к обратным прокси-серверам в прокси-меню и добавить новый обратный прокси-сервер: прокси-сервер будет трафик, направленный на ваш localhost: PORTNUM и re-, маршрутизировать его на ваш сервер drupal. Он будет записывать сообщения в обоих направлениях. Кроме того, вы можете нанести вред вашему сервису drupal пару раз из FireFox и посмотреть, как веб-приложение проходит проверку подлинности, чтобы вы знали, к чему вы стремитесь.
Чтобы увидеть телефонный трафик, вы должны быть уверены, что ваш телефон подключен к той же сети, что и ваш компьютер. re- напишите свой телефонный код, чтобы он обращался к своим веб-запросам на ваш локальный компьютер. Если у вас все настроено правильно, то у Чарльза появится сообщение с вопросом, можно ли подключить свой телефон. После этого вы можете увидеть, что отличается от заголовков, которые вы отправляете, от того, что отправляет веб-сервер.