您在發件人/收件人週期的回覆部分中收到錯誤。
雖然這很可能是在發件人(不發送一個適當的請求)的問題,也可以通過在接收 PHP腳本配置錯誤引起的。即使請求是正確的,接收方可能仍然沒有HTTP_RAW_POST_DATA
可用。
請參見:http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data
總是產生$ HTTP_RAW_POST_DATA包含有原始的POST數據。 否則,該變量僅填充數據的無法識別的MIME類型 。但是,訪問原始POST 數據的首選方法是php://輸入。 $ HTTP_RAW_POST_DATA不適用於 enctype =「multipart/form-data」。
所以要檢查的第一件事就是$HTTP_RAW_POST_DATA
是否確實填充,從網頁上面要求之一:
- 在.ini變量
always_populate_raw_post_data
爲True,
- 或POST與發送一個
Content-Type
POST處理程序無法識別(也許人們可以使用「text/raw」)
此時,發送數據的正確方法是
curl_setopt($handle, CURLOPT_POSTFIELDS, urlencode('Raw POST data'));
但是請注意,接收這些數據將不依賴於$HTTP_RAW_POST_DATA
所有,但讀取虛擬文件php://input
內容的推薦方式。
php://輸入是一個只讀流,允許您從請求主體讀取原始數據 。在POST請求的情況下,最好 使用php://輸入,而不是$HTTP_RAW_POST_DATA
,因爲它不依賴於特殊的php.ini指令,因此不會使用 。而且,對於默認情況下未填充 $ HTTP_RAW_POST_DATA的情況,這是潛在的 較少的內存密集型替代方式,以激活 always_populate_raw_post_data。
我相當肯定的接收器工作正常(使用Live HTTP頭添加爲Firefox)的罰款,手動發送POST數據。 我知道php://輸入以及它如何更好,但是,在這種情況下,我需要$ HTTP_RAW_POST_DATA的解決方案。 謝謝你的回覆! – user1488335
那麼,在這種情況下,您可以在PHP.INI中設置always-populate-raw-post-data設置;或者你可以發送一個「無法識別的」(無論*表示*)「MIME類型」來強制使用'$ HTTP_RAW_POST_DATA'。更新答案... – LSerni
這個答案似乎與原始問題無關,這個問題實際上是關於使用PHP中的libcurl執行HTTP請求,而不是訪問發送給運行在Web服務器中的PHP腳本的POST數據。 – Shadocko