0

Мне нужно загрузить некоторые данные на сайт, используя запрос POST. Я знаю, что использовать HTTP-клиент для execute a POST requestAndroid - аутентификация на основе форм

Проблема в том, что для этого сначала выполните проверку подлинности.
Сайт представляет собой простую страницу с запросом на имя пользователя и пароль. Я предполагаю, что он хранит cookie в браузере и проверяет последующие запросы, чтобы проверить, не завершена ли я уже.
Но у меня нет конкретной идеи, как реализовать это на Android.

Клиент просто дал мне так:
URL для загрузки: http://xyz.com/?page=add
Credentials: администратор/администратора
Формат данных:

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

И ничего другого.

Не могли бы вы указать мне в правильном направлении, как я буду заниматься этим?

ответ

1

How to do HTTP authentication in android?

Заканчивать верхний ответ на этот вопрос. Очень хорошее объяснение.

+0

Спасибо, ребята, это очень помогло мне, теперь я могу видеть загруженные вами данные на сервере. Следующая ситуация, с которой я сейчас сталкиваюсь, заключается в том, как загрузить в одно и то же время, строковые данные - параметры, + двоичные данные - изображение. Я видел примеры, которые используют только один или другой случай, но не оба. Чтобы отправить запрос POST со строковыми параметрами, я использовал urlEncodedFormEntity(), но я видел в тех случаях, когда вам нужно загрузить изображение, которое они используют: MultipartEntity(). – VCODE

0

Если вы делаете POST, используя HttpClient как пост вы связаны описывающим, вы можете добавить обычную проверку подлинности, выполнив следующие действия:

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

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

НТН

0

Я знаю, что это очень старый вопрос, но это был лучший результат поиска, в котором я работал, и я хотел добавить еще один способ, которым я смог это сделать, используя CookieStore и HttpClient.

Для моего варианта использования (конфигурация сервера Tomcat) я ударил свой базовый аутентифицированный URL-адрес, чтобы получить файл cookie, POSTing мои данные аутентификации в конечную точку отправки формы, а затем с помощью файла 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())); 
Смежные вопросы