Я пытаюсь создать HTTP-запрос POST в Android, где я передаю «имя пользователя» и «пароль» в качестве переменных POST.
У меня есть код, который работает в большинстве случаев. Однако, когда пароль содержит символ «@», он больше не работает.
Вот мой код
HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpClient httpClient = new DefaultHttpClient(params);
HttpPost post = new HttpPost(url);
List<NameValuePair> postData = new ArrayList<NameValuePair>();
postData.add(new BasicNameValuePair("username", "the_username"));
postData.add(new BasicNameValuePair("password", "the_password"));
post.setEntity(new UrlEncodedFormEntity(postData, HTTP.UTF_8));
HttpResponse response = httpClient.execute(post);
Если «the_password» содержит символ @, например «the_password @», то я не уверен, что POST отправляет по проводам, но я получаю сообщение об ошибке от сервера.
Документация указывает, что некоторые специальные символы должны быть экранированы, но я не использую API-вызов для этого - и мне не повезло, пытаясь вручную экранировать символы в моем жестком кодированная строка.
Еще больше, если я заменю следующую строку:
post.setEntity(new UrlEncodedFormEntity(postData, HTTP.UTF_8));
с
post.setEntity(new StringEntity("username=the_username&password=the_password@", HTTP.UTF_8));
Тогда все работает - но это не очень хорошее решение, потому что имя пользователя и пароль вводятся пользователем, и я не уверен, как это будет работать, если они передадут строку с амперсандом (&) или равно (=) в он
Есть мысли ??