0

POST リクエストを使用して、サイトにデータをアップロードする必要があります。HTTP クライアントを使用して POST 要求を実行することを知っています

問題は、これを行うには、最初に認証する必要があることです。
このサイトは、ユーザー名とパスワードの入力を求める単純なページです。ブラウザーに Cookie を保存し、後続の要求をチェックして、既に認証されているかどうかを確認すると仮定します。
しかし、これを Android に実装する具体的なアイデアはありません。

クライアントは私にこれをくれました:
アップロードする URL: http://xyz.com/?page=add
資格情報: admin/admin
データのフォーマット:

$_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
}

何もありません。

これを行うにはどうすればよいか、正しい方向に向けてください。

4

3 に答える 3

1

AndroidでHTTP認証を行うには?

この質問に対するトップの回答を確認してください。非常に良い説明。

于 2012-05-31T18:42:55.920 に答える
0

これは非常に古い質問であることは知っていますが、これは私が遭遇し続けたトップの検索結果であり、CookieStore と HttpClient を使用してこれを行う別の方法を追加したいと考えました。

私のユース ケース (Tomcat サーバー構成) では、基本認証済み URL にアクセスして Cookie を取得し、認証データをフォーム送信エンドポイントに POST してから、後続の呼び出しに 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() ) );
于 2015-04-18T22:41:50.040 に答える
0

リンクした投稿で説明されているように POST を実行している場合はHttpClient、次の手順で基本認証を追加できます。

String username, password;
DefaultHttpClient client = new DefaultHttpClient();

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

HTH

于 2012-05-31T18:49:41.730 に答える