我一直在尝试从我的Android应用程序向URL发送POST请求,但我得到的只是一个空的$ _POST。这是我的代码,它在Asynctask中运行。我在StackOverflow中查看了类似这样的几个问题,但没有一个可以帮助我。
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.somesite.com/clients/app-controller/posts.php");
try {
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("id", "12345"));
pairs.add(new BasicNameValuePair("name", "John"));
pairs.add(new BasicNameValuePair("post", "test123"));
post.setEntity(new UrlEncodedFormEntity(pairs, HTTP.UTF_8));
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
HttpResponse response = httpClient.execute(post);
String text = EntityUtils.toString(response.getEntity());
System.out.println("STATUS CODE " + response.getStatusLine().getStatusCode());
System.out.println("RETURN " + text);
} catch (ClientProtocolException e) {
System.out.println("ERROR1: " + e.getStackTrace());
} catch (IOException e) {
System.out.println("ERROR2: " + e.getStackTrace());
}
在服务器端,我有一个PHP测试脚本测试$ _POST变量是否正常。
<?php echo "ISSET = " . isset($_POST["id"]) . isset($_POST["name"]) . isset($_POST["post"]); ?>
我得到的只是一个未设置$ _POST
STATUS CODE 200
RETURN ISSET =
我没有收到任何错误警告,应用程序也没有崩溃。
我尝试将变量作为附加到URL的GET请求,并更改了我的PHP文件以处理$ _GET请求:
HttpPost post = new HttpPost("http://www.somesite.com/clients/app-controller/posts.php?id=1234&name=John&post=test123");
工作得很好。我可以在PHP脚本中读取所有$ _GET变量。但我需要它作为POST请求。
我的AndroidManifest.xml中有INTERNET权限。在同一个应用程序中,我请求另一个PHP脚本,它按预期工作。
<uses-permission android:name="android.permission.INTERNET" />
有什么想法吗?
答案 0 :(得分:0)
如果您的HttpPost网址已“www”,请将其删除并尝试。如果没有添加www。
因为您可能已将 yoursite.com 重定向到 www.yoursite.com ,反之亦然。在这种情况下,您的HttpPost URL应该是指定URL而不是重定向URL。在HTTP重定向过程中,参数将丢失,并且将执行空POST。这就是服务器没有收到您的帖子数据的原因。