我一直在試圖從我的Android應用程序發送一個POST請求到一個URL,但我得到的只是一個空的$ _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 =
我沒有得到任何錯誤警告和App不會崩潰。
我試圖把變量連接到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" />
有什麼想法?
請執行var_dump($ _ POST)進行調試。 – VM4 2014-09-30 14:34:52
不是一個真正的解決方案,而是更多的建議:android中的Apache HTTP庫[非常舊,而且沒有維護](http://android-developers.blogspot.co.il/2011/09/androids-http-clients.html )。你最好使用HttpsUrlConnection或類似改造的庫。 – Eran 2014-09-30 14:39:39
當我做一個var_dump($ _ POST)時,我得到「RETURN array(0){}」 – emedrado 2014-09-30 14:44:02