我有一个已经采用正确的URLEncoded Form格式的字符串,并希望通过Android上的POST请求将其发送到PHP服务器。我知道在Android上发送网址编码表单的方法使用UrlEncodedFormEntity
,我知道how to use it。问题在于数据已经进入已编码的函数并由&符号加入,因此使用UrlEncodedFormEntity
将需要进行大量额外工作才能将其转换为List
NameValuePairs
而我宁愿不这样做。
那么,如何将此字符串作为内容正文发送正确的POST请求?
我已尝试使用StringEntity
,但PHP服务器未获取任何数据(空$_POST
对象)。
我正在测试http://test.lifewanted.com/echo.json.php只是
<?php echo json_encode( $_REQUEST );
以下是已编码数据的示例:
partnerUserID =电子邮件%40example.com&安培; partnerUserSecret =输入mypassword&安培;命令=身份验证
答案 0 :(得分:15)
如果您不介意使用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();
}
}
}
}