Передача файлов Android в Drupal Q2

1

Ранее я задал вопрос в 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.

Кто-нибудь может помочь мне?

Теги:
cookies
drupal
session-cookies

1 ответ

1

Это не обязательно решение для вашей проблемы, но может быть полезно.

Когда я подхожу к таким проблемам, мне нужен способ увидеть, как выглядят заголовки запросов и из моего приложения.

Обычно я использую Charles (отличный инструмент) http://www.charlesproxy.com/. И нет, у меня нет никакой связи с компанией, это просто отличный инструмент.

Там функция Чарльза называется обратным прокси-сервером, и в основном это позволяет вам отказываться от трафика через Чарльз на ваш сервер drupal, и вы можете его проверять, когда он перетекает в ваше приложение и из него.

Используя charles, вы можете понюхать, как выглядит хороший запрос из вашего веб-браузера, а затем вы можете понюхать, как выглядят запросы вашего приложения для Android. Сравните их, и вы можете увидеть, где ваше приложение плохо формирует заголовки запросов.

Фаза отладки выглядит следующим образом:

Как только вы настроите Чарльза, дважды нажмите на свой сервер drupal и проверьте структуру запроса/ответа, который вы видите в браузере.

Затем удалите свою службу пару раз из приложения Android и обратите внимание на различия. Может быть, печенье не проходит, может быть, оно искажено, может быть, есть что-то еще в заголовках. Это позволит вам увидеть, что вам нужно для съемки, чтобы заставить Drupal принять запросы.

НЕКОТОРЫЕ ИНСТРУКЦИИ -

Обратный прокси позволит вам проверять трафик, поступающий с вашего телефона, и переходить на ваш сайт drupal (включая заголовки, чтобы вы точно видели, какие cookie отправляются). Чтобы настроить обратный прокси-сервер, вам нужно перейти к обратным прокси-серверам в прокси-меню и добавить новый обратный прокси-сервер: прокси-сервер будет трафик, направленный на ваш localhost: PORTNUM и re-, маршрутизировать его на ваш сервер drupal. Он будет записывать сообщения в обоих направлениях. Кроме того, вы можете нанести вред вашему сервису drupal пару раз из FireFox и посмотреть, как веб-приложение проходит проверку подлинности, чтобы вы знали, к чему вы стремитесь.

Чтобы увидеть телефонный трафик, вы должны быть уверены, что ваш телефон подключен к той же сети, что и ваш компьютер. re- напишите свой телефонный код, чтобы он обращался к своим веб-запросам на ваш локальный компьютер. Если у вас все настроено правильно, то у Чарльза появится сообщение с вопросом, можно ли подключить свой телефон. После этого вы можете увидеть, что отличается от заголовков, которые вы отправляете, от того, что отправляет веб-сервер.

  • 0
    Спасибо за предложение инструмента. Я пойду на это прямо сейчас.
  • 0
    нп. Правильно настроить обратный прокси-сервер может быть немного хитрым делом. Дайте мне знать, если у вас возникли проблемы, и я могу попытаться указать вам правильное направление.
Показать ещё 4 комментария

Ещё вопросы

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