2015-06-17 52 views
0

php工作存在奇怪的行爲。我通過POST傳遞json數據,並期望數據出現在php://input中。而不是用奇怪的鍵/值對填充$ _POST。這裏是捲曲的呼叫

$process = curl_init("https://www.myurl.com/script"); 
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($process, CURLOPT_SSL_VERIFYHOST, FALSE); 


$params = '{"Response":{"Data":{"RMID":"0910403545","QID":"965102499460","RspCode":"000","RspDesc":"Successful Transaction Complete","TrxID":"61801","TrxStatus":"COMPLETE","BID":"61801","TrxRC":"4201","TrxTime":"2015-06-15 14:53:51","TrxValue":"9"}},"Signature":"5bf094adb23e40e1de135c055684dd2098ab18d0","Certificate":"-----BEGIN PGP SIGNED MESSAGE----- 
Hash: SHA1 

5bf094adb23e40e1de135c055684dd2098ab18d0 
-----BEGIN PGP SIGNATURE----- 
Version: GnuPG v1.4.5 (GNU/Linux) 

iD8DBQFVfoSPQ8sozXgiBRURArdkAKCwx5ggf5dE+djAAMIDsHaapLRgOACePyys 
a5scG9GhRFDefGz5CLHrqfI= 
=AWpR 
-----END PGP SIGNATURE----- 
"}'; 

curl_setopt($process, CURLOPT_POST, true); 
curl_setopt($process, CURLOPT_POSTFIELDS, $params); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1); 

$return = curl_exec($process); 

,在另一端,我得到

echo "<pre>"; 
var_export($_POST); 
--------------------------------------------- 
array (
    '{"Response":{"Data":{"RMID":"0910403545","QID":"965102499460","RspCode":"000","RspDesc":"Successful_Transaction_Complete","TrxID":"61801","TrxStatus":"COMPLETE","BID":"61801","TrxRC":"4201","TrxTime":"2015-06-15_14:53:51","TrxValue":"9"}},"Signature":"5bf094adb23e40e1de135c055684dd2098ab18d0","Certificate":"-----BEGIN_PGP_SIGNED_MESSAGE----- 
Hash:_SHA1 

5bf094adb23e40e1de135c055684dd2098ab18d0 
-----BEGIN_PGP_SIGNATURE----- 
Version:_GnuPG_v1_4_5_(GNU/Linux) 

iD8DBQFVfoSPQ8sozXgiBRURArdkAKCwx5ggf5dE_djAAMIDsHaapLRgOACePyys 
a5scG9GhRFDefGz5CLHrqfI' => ' 
=AWpR 
-----END PGP SIGNATURE----- 
"}', 
) 

爲什麼會這樣?

回答

1

關於curl_setopt($process, CURLOPT_POSTFIELDS, $params);

此參數可以像 'PARA1 = VAL1 & PARA2 = val2的& ...' 或作爲陣列的urlencoded的字符串被傳遞。 (ref

捲曲期待一個PARAM /值對,而您提供只是一個字符串,所以捲曲呈參數就是一切上升到第=跡象,而就是一切之後,直到遇到第一個&符號,其中沒有任何符號。這就是爲什麼$_POST在轉儲時看起來這樣。緩解這一

一種方法是用urlencode的$params字符串,並將其傳遞到curl_setopt"data=".rawurlencode($params),然後用rawurldecode($_POST["data"]);檢索。