Передача файлов Android в Drupal Q2 - PullRequest
1 голос
/ 05 июня 2011

Ранее я задавал вопрос на передаче файлов cookie с Android на Drupal об отправке файлов cookie из моего приложения Android на мой веб-сайт Drupal, на который я получил очень хороший ответ. Вся идея заключается в том, чтобы обеспечить постоянное взаимодействие клиент-сервер.

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

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, ""). Я пытаюсь отправить эту информацию обратно, чтобы при выполнении этой функции и успешном создании нового узла истории на моем сайте Drupal автор распознавался как пользователь, который зарегистрировался и вошел в систему из приложения Android.

В настоящее время узел создан, но пользователь является "анонимным". Следовательно, мне нужно отправить информацию о cookie-файлах пользователя Drupal.

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

1 Ответ

1 голос
/ 05 июня 2011

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

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

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

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

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

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

После того, как вы настроили Чарльза, пару раз подключитесь к вашему серверу drupal и проверьте структуру запроса / ответа, которую вы видите в браузере.

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

НЕКОТОРЫЕ БОЛЬШЕ ИНСТРУКЦИЙ -

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

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

...