2011-07-04 77 views
1

我在這裏看到有幾個帖子有同樣的問題,但沒有一個是我的簡單,因此後。

我是新來的php,我看到$_POST$_REQUEST變量都是空的。我可以使用apache_request_headers()獲得標題,並能夠正確查看標題。這只是$_POST變量是空的。

我的客戶端是一個Android應用程序,並正在生成郵件消息。我用tcpdump來測試它。此外,apache日誌顯示預期的PHP被調用。我使用Apache 2.2.14和PHP 5.2.12的標準安裝,沒什麼特別的。

任何人都可以想到爲什麼$_POST變量爲空的任何原因?

另外我沒有在我的代碼中使用類。它只是簡單的代碼,根據需要調用其他類的函數。我提到這一點是因爲我看到另一個帖子,建議使用$this->input->post(),但在我的情況下這是不可能的。

編輯:發現問題感謝下面的肖恩。 「Content-Type」設置不正確,導致實際值未達到php代碼。奇怪的是,空請求的標題是我設置的。爲什麼數據會被剝離?

+0

向我們展示您的轉儲。我懷疑你實際上沒有正確生成頭文件。 – Brad

+2

您是否檢查$ _GET是否爲空? – vascowhite

+0

@vascowhite:在這種情況下,$ _REQUEST也不會是空的。 –

回答

3

確保您的Android客戶端在POST上發送正確的內容類型。它應該設置爲application/x-www-form-urlencoded

 url = new URL("your URL"); 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     connection.setRequestMethod("POST"); 
+0

我在編寫與Microsoft ASP.NET應用程序進行通信的iOS應用程序時,實際上遇到了同樣的問題。 –

+0

你是對的!內容類型錯誤。正確設置使其工作。 – user220201

1

首先我會檢查你的服務器是否沒有使用301'永久移動'代碼重定向你的POST數據。打開你的日誌文件來檢查這一點。如果運行良好,你應該看到一個200代碼(或最差的201)。您會注意到,每次調用服務器時都會生成POST和GET代碼。確保兩者都是200.如果只有GET是200,但POST是301,那麼你的服務器由於某種原因重定向(例如,你打電話給http://mysite.com,但服務器重定向到http://www.mysite.com)。

如果你需要測試GET沒有返回值到Android android中使用HttpPost嘗試這樣的事:

HttpPost httppost = new HttpPost("http://www.mysite.com?somevarname=somevalue"); 
httpclient.execute(httppost); 

然後從服務器端嘗試做一些像創建文件,或東西,如果GET瓦爾存在。

但是,如果您的日誌具有GET和POST的重定向代碼,那麼您需要使用.htaccess覆蓋重定向,或配置主機以停止任何重定向。

祝你好運!