2014-09-30 74 views
0

我一直在試圖從我的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" /> 

有什麼想法?

+0

請執行var_dump($ _ POST)進行調試。 – VM4 2014-09-30 14:34:52

+0

不是一個真正的解決方案,而是更多的建議:android中的Apache HTTP庫[非常舊,而且沒有維護](http://android-developers.blogspot.co.il/2011/09/androids-http-clients.html )。你最好使用HttpsUrlConnection或類似改造的庫。 – Eran 2014-09-30 14:39:39

+0

當我做一個var_dump($ _ POST)時,我得到「RETURN array(0){}」 – emedrado 2014-09-30 14:44:02

回答

0

如果您的HttpPost URL有「www」刪除它並嘗試。如果不添加www。

因爲,你可能會重定向yoursite.comwww.yoursite.com,反之亦然。在這種情況下,您的HttpPost網址應該是指定網址,而不是重定向網址。這些參數將在HTTP重定向過程中丟失,並且會執行一個空的POST。這就是服務器沒有收到你的發佈數據的原因。