Android HTTP GET cookie / javascript问题?

时间:2013-06-25 13:54:13

标签: javascript android cookies httpclient httprequest

我写了一个Android应用程序,应该使用HTTP GET(有时是POST)请求“连接”到(私人)论坛。基本理念是这样的:

  1. 用户提交凭据的登录页面。登录是通过HTTP论坛(尝试GET,同样的结果)到论坛的登录页面进行的,其用户名和密码作为参数。该请求应返回我存储在BasicCookieStore中的一些cookie。

  2. 使用HTTP GET检索他们想要访问的论坛的每个页面。我解析了我获得的HTML源代码并仅显示相关信息。为了对用户进行身份验证,我用于登录的相同BasicCookieStore(步骤1)被设置为HttpClient的cookiestore。

  3. 此方法在我的测试期间一直在运行,并且也为我的beta测试人员工作过。现在我发布了应用程序,很明显许多用户遇到了问题,特别是在移动连接上(Wifi似乎没问题)。

    通过记录在所有HTTP GET请求中返回的HTML源代码,我强烈怀疑实际登录工作正常,但不知何故,cookie不会被返回或存储或者在那个方向上。问题是他们将收到的第一页的HTML源应该是论坛列表。但是,对于有问题的用户,他们会获得一个基本上读取“您必须启用Javascript才能查看此页面”的页面

    奇怪的是,我在测试时没有收到该页面,我的许多用户也没有收到。更糟糕的是:一些用户现在报告它可以在几天或几周内正常工作,现在已经停止工作了。其他人恰恰相反:没有工作几天,现在突然工作。一位用户报告说他在希腊待了2个星期,在那里工作完美无缺,然后又回到了德国,并再次停止工作。 这里似乎有一个随机的组件。

    我尝试过各种各样的事情,主要是我做HTTP GET请求的方式。我开始使用普通DefaultHttpClient,使用各种设置,例如:

    HttpClient httpClient = new DefaultHttpClient();
    
    // Define parameters
    HttpParams httpParams = httpClient.getParams();
    HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT);
    HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT); 
    HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1);
    
    // Set cookiestore (getCookieStore returns the same cookiestore)
    HttpContext localContext = new BasicHttpContext();
    localContext.setAttribute(ClientContext.COOKIE_STORE, getCookieStore());
    
    HttpGet http = new HttpGet(url);
    http.addHeader("Accept", ACCEPT_STRING);
    http.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    
    // Execute
    HttpResponse response = httpClient.execute(http, localContext);
    //... Process result (omitted)
    

    现在我已经切换到使用AndroidHttpClient,其余的代码基本不变,似乎得到了相同的结果。

    我也尝试过使用AsyncHttpClient库,它的工作方式完全不同,但同样的结果也是如此。我也尝试使用它的PersistentCookieStore,你猜对了 - 结果相同。

    此时我很无能为力。我看错了方向吗?一个网站响应“你需要为某些用户启用Javascript”而不是所有用户的事实似乎表明cookie存在问题。我不知道一个网站如何确定是否启用了javascript,但肯定有HTTP GET请求,没有javascript正在运行。那么为什么我(以及许多其他用户)在没有任何问题的情况下访问该页面,而其他用户则获得“无javascript”消息?我能想到的唯一原因是cookies,但我不知道究竟是什么问题。

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我怀疑问题是饼干。更可能是网络配置问题。

例如,您的用户可能已经连接到带有强制门户网站页面的wifi热点(使用javascript可以让您在使用热点之前登录)。在这种情况下,他们应首先打开浏览器,尝试浏览(例如)http://google.com,重定向,登录,然后启动您的应用。

或者,您的用户可能正在通过代理进行连接。世界各地的许多移动运营商都会代理其用户的HTTP连接,有时会对内容做出可怕的事情。切换到HTTPS可能会有所帮助。