Android到Drupal cookie转移Q2

时间:2011-06-05 04:56:06

标签: android drupal cookies session-cookies

之前我在Android to Drupal cookie transfer问了一个关于将我的Android应用程序中的cookie发送回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应用程序注册并登录的用户。

目前,节点已创建,但用户是“匿名”。因此,我需要发回Drupal的用户cookie信息。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

这不一定是您的问题的代码解决方案,但可能会有所帮助。

当我接近这样的问题时,我需要一种方法来查看我的应用程序的请求标头是什么样的。

我通常使用Charles(伟大工具)http://www.charlesproxy.com/。不,我与公司没有任何关系,它只是一个很棒的工具。

Charles的一项功能称为反向代理,基本上它允许您通过Charles将流量反弹到您的drupal服务器,并且可以在它流入和流出您的应用时检查它。

使用charles,您可以嗅探Web浏览器的好请求,然后您可以嗅探Android应用程序的请求。比较两者,你可以看到你的应用程序在哪里严重影响请求标题。

调试阶段如下:

一旦你设置了Charles,就可以多次点击你的drupal服务器并检查你从浏览器中看到的请求/响应的结构。

然后从Android应用程序中多次点击您的服务并注意差异。也许cookie没有通过,也许它的格式不正确,也许还有其他关于标题的东西。这将让你看到你需要拍摄什么才能让Drupal接受请求。

更多说明 -

反向代理将允许您检查来自手机的流量并进入您的drupal站点(包括标题,这样您就可以确切地看到正在发送的cookie)。要设置反向代理,您需要转到代理菜单下的反向代理并添加新的反向代理 - 代理将获取指向您本地主机的流量:PORTNUM并将其重新路由到您的drupal服务器。它会记录两个方向的通信。此外,您可以从FireFox中多次点击drupal服务,并观看Web应用程序的身份验证方式,以便了解您的目标。

要查看手机流量,您需要确保手机已连接到与计算机相同的网络。重新编写您的电话代码,以便它解决其对本地计算机的Web请求。如果您已正确配置了所有内容,那么Charles会弹出一条消息,询问您是否可以连接手机。之后,您可以看到您从Web服务器发送的内容发送的标头有何不同。