【问题标题】:Android - Form based authenticationAndroid - 基于表单的身份验证
【发布时间】:2012-06-06 01:10:06
【问题描述】:

我需要使用 POST 请求在网站上上传一些数据。我知道使用HTTP客户端来execute a POST request

问题在于,为了做到这一点,您应该先进行身份验证。
该站点是一个提示输入用户名和密码的简单页面。我假设它在浏览器中存储一个 cookie 并检查后续请求以查看我是否已经通过身份验证。
但我不知道如何在 Android 上实现这一点。

客户刚刚给了我这个:
上传网址:http://xyz.com/?page=add
凭据:管理员/管理员
数据格式:

$_POST = {
  ["Name"]=>string(255)
  ["Address"]=>string(255)
  ["ZIP"]=>string(50)
  ["City"]=>string(100)
  ["Phone"]=>string(50)
  ["Email"]=>string(50)
  ["Age"]=>int(11)
  ["Validation_Result"]=>string(255)
  ["Comment"]=>string(-)
}
$_FILES["Image"] = {
    ["name"]=>string "3D-graphics_3D_Triangles_006790_.jpg"
    ["type"]=>string "image/jpeg"
    ["tmp_name"]=>string "C:\Windows\Temp\php1362.tmp"
    ["error"]=>int(0)
    ["size"]=>int
}

没有别的了。

能否请您指出我将如何去做的正确方向?

【问题讨论】:

    标签: android android-layout android-intent android-emulator android-ndk


    【解决方案1】:

    How to do HTTP authentication in android?

    查看此问题的最佳答案。很好的解释。

    【讨论】:

    • 谢谢你们,这对我帮助很大,现在我可以在服务器上看到我上传的数据了。我现在要面对的下一个情况是如何同时上传字符串数据-参数,+二进制数据-图像。我见过只使用一种或另一种情况的例子,但不能同时使用这两种情况。要发送带有字符串参数的 POST 请求,我使用了 urlEncodedFormEntity(),但我已经看到在需要上传他们使用的图像的情况下:MultipartEntity()。
    【解决方案2】:

    如果您使用HttpClient 进行 POST,正如您链接的帖子所描述的那样,您可以通过执行以下操作添加基本身份验证:

    String username, password;
    DefaultHttpClient client = new DefaultHttpClient();
    
    UsernamePasswordCredentials creds = new UsernamePasswordCredentials(username, password);
    client.getCredentialsProvider().setCredentials(AuthScope.ANY, creds);
    

    HTH

    【讨论】:

      【解决方案3】:

      我知道这是一个非常古老的问题,但这是我一直遇到的最高搜索结果,我想添加另一种方法,我设法使用 CookieStore 和 HttpClient 做到这一点。

      对于我的用例(Tomcat 服务器配置),我点击了经过身份验证的基本 URL 以获取 cookie,将我的身份验证数据发布到表单提交端点,然后使用 cookie 进行后续调用。这是让它为我工作的简化代码:

      String cookieUrl = "SOME_URL_THAT_WILL_PROVIDE_COOKIE";
      String authenticateUrl = "URL_TO_POST_FORM_DATA";
      String dataUrl = "AUTHENTICATED_URL_YOU_WANT_DATA_FROM";
      
      final String userNameKey = "FORM_KEY_FOR_USERNAME";
      final String userPassKey = "FORM_KEY_FOR_PASSWORD";
      final String userName = "USER_NAME";
      final String userPass = "USER_PASSWORD";
      
      HttpClient client = new DefaultHttpClient();
      CookieStore cookieStore = new BasicCookieStore();
      HttpContext context = new BasicHttpContext();
      context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
      
      String getUrl = cookieUrl;
      HttpGet get = new HttpGet( getUrl );
      HttpResponse getResponse = client.execute(get, context);
      Log.d( "ConnectionTest", "GET @ " + getUrl );
      Log.d( "ConnectionTest", getResponse.getStatusLine().toString() );
      
      List<NameValuePair> authDataList = new ArrayList<NameValuePair>();
      authDataList.add( new NameValuePair() {
          @Override
          public String getName() {
              return userNameKey;
          }
      
          @Override
          public String getValue() {
              return userName;
          }
      } );
      authDataList.add( new NameValuePair() {
          @Override
          public String getName() {
              return userPassKey;
          }
      
          @Override
          public String getValue() {
              return userPass;
          }
      } );
      HttpEntity authEntity = new UrlEncodedFormEntity( authDataList );
      
      String authPostUrl = authenticateUrl;
      HttpPost authPost = new HttpPost( authPostUrl );
      authPost.setEntity( authEntity );
      HttpResponse authPostResponse = client.execute(authPost, context);
      Log.d( "ConnectionTest", "POST @ " + authPostUrl );
      Log.d( "ConnectionTest", authPostResponse.getStatusLine().toString() );
      
      String getUsersUrl = dataUrl;
      HttpGet usersGet = new HttpGet( getUsersUrl );
      HttpResponse usersGetResponse = client.execute(usersGet, context);
      Log.d( "ConnectionTest", "GET @ " + getUsersUrl );
      Log.d( "ConnectionTest", usersGetResponse.getStatusLine().toString() );
      Log.d( "ConnectionTest", EntityUtils.toString( usersGetResponse.getEntity() ) );
      

      【讨论】:

        猜你喜欢
        • 2014-12-13
        • 1970-01-01
        • 1970-01-01
        • 2012-12-14
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多