В Android сделайте POST-запрос с данными в кодированной форме URL без использования UrlEncodedFormEntity
У меня есть строка в правильном формате URLEncoded Form, и я хотел бы отправить ее через запрос POST на Android на сервер PHP. Я знаю, что метод отправки URL-кодированных форм на Android использует UrlEncodedFormEntity
и я знаю, как его использовать. Проблема в том, что данные поступают в функцию, уже URL-адрес которой закодирован и объединен с помощью амперсандов, поэтому UrlEncodedFormEntity
будет включать в себя много дополнительной работы, чтобы превратить его в List
из NameValuePairs
и я бы предпочел нет.
Итак, как мне сделать правильный запрос POST, отправив эту строку в качестве тела контента?
Я уже пытался использовать StringEntity
, но сервер PHP не получил никаких данных (пусто $_POST
объект).
Я тестирую против http://test.lifewanted.com/echo.json.php который просто
<?php echo json_encode( $_REQUEST );
Вот пример уже закодированных данных:
partnerUserID = электронная почта%40example.com&partnerUserSecret= мойпароль и команда = Аутентифицировать
1 ответ
Если вы не возражаете против использования HttpURLConnection
вместо (рекомендуется) HttpClient
тогда вы могли бы сделать это так:
public void performPost(String encodedData) {
HttpURLConnection urlc = null;
OutputStreamWriter out = null;
DataOutputStream dataout = null;
BufferedReader in = null;
try {
URL url = new URL(URL_LOGIN_SUBMIT);
urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestMethod("POST");
urlc.setDoOutput(true);
urlc.setDoInput(true);
urlc.setUseCaches(false);
urlc.setAllowUserInteraction(false);
urlc.setRequestProperty(HEADER_USER_AGENT, HEADER_USER_AGENT_VALUE);
urlc.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
dataout = new DataOutputStream(urlc.getOutputStream());
// perform POST operation
dataout.writeBytes(encodedData);
int responseCode = urlc.getResponseCode();
in = new BufferedReader(new InputStreamReader(urlc.getInputStream()),8096);
String response;
// write html to System.out for debug
while ((response = in.readLine()) != null) {
System.out.println(response);
}
in.close();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}