如何使用PHP和cURL转发$ _POST?
我在我的PHP脚本中收到POST请求,并希望使用POST将此帖子调用转发给另一个脚本。这个怎么做?如果此操作需要,我可以使用cURL。
也许:
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
http://www.php.net/manual/en/function.curl-setopt.php
这可以作为像urlencoded的字符串被传递 'PARA1 = VAL1 & PARA2 = val2的&...' 或者作为与字段名作为关键字数组和现场数据作为价值。
你以前试过这个吗?使用我使用的CURL版本,这将发送“multipart/form-data”中的字段,而不是普通的帖子。 – 2010-04-28 00:41:32
我从来没有尝试过,但PHP文档在记录功能方面确实做得很好。 – 2010-04-29 19:19:11
这是大多数时候的答案。但是,如果您在帖子内容中传递了深层变量(例如“...&var1 [var2] = val&...”),它将不起作用(var1将作为空数组传递)。 ZZCoder的答案在下面(使用'http_build_query()')是(完整的)正确的答案。 – zeh 2012-10-11 15:35:56
<?php
function executeCurl($arrOptions) {
$mixCH = curl_init();
foreach ($arrOptions as $strCurlOpt => $mixCurlOptValue) {
curl_setopt($mixCH, $strCurlOpt, $mixCurlOptValue);
}
$mixResponse = curl_exec($mixCH);
curl_close($mixCH);
return $mixResponse;
}
// if need any http auth
$username = 'http-auth-username';
$password = 'http-auth-password';
$requestType = 'POST'; // this can be PUT or POST
// this can be $arrPostData = $_POST;
$arrPostData = array(
'key1' => 'value-1-for-k1y-1',
'key2' => 'value-2-for-key-2',
'key3' => array(
'key31' => 'value-for-key-3-1',
'key32' => array(
'key321' => 'value-for-key321'
)
),
'key4' => array(
'key' => 'value'
)
);
// you can set your post data
$postData = http_build_query($arrPostData); // raw php array
$postData = json_encode($arrPostData); // Only USE this when request json data
$arrResponse = executeCurl(array(
CURLOPT_URL => 'http://whatever-your-request-url.com/xyz/yii',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPGET => true,
CURLOPT_VERBOSE => true,
CURLOPT_AUTOREFERER => true,
CURLOPT_CUSTOMREQUEST => $requestType,
CURLOPT_POSTFIELDS => $postData,
CURLOPT_HTTPHEADER => array(
"X-HTTP-Method-Override: " . $requestType,
'Content-Type: application/json', // Only USE this when request json data
),
// if required HTTP Authentication use below lines
CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
CURLOPT_USERPWD => $username. ':' . $password
));
如果有人需要这个,这里是一个新的路线$ _ POST一个功能齐全的卷曲请求你想要的(基于ZZ编码的回答以上),其中
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://urlOfFileWherePostIsSubmitted.com");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
// ZZ coder's part
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
$response = curl_exec($ch);
curl_close($ch);
您的PHP脚本是否需要访问从转发的POST发回的响应? – webbiedave 2010-04-27 22:14:53