2010-04-27 43 views
9

我在我的PHP脚本中收到POST请求,并希望使用POST将此帖子调用转发给另一个脚本。这个怎么做?如果此操作需要,我可以使用cURL。

+0

您的PHP脚本是否需要访问从转发的POST发回的响应? – webbiedave 2010-04-27 22:14:53

回答

12

也许:

curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); 

http://www.php.net/manual/en/function.curl-setopt.php

这可以作为像urlencoded的字符串被传递 'PARA1 = VAL1 & PARA2 = val2的&...' 或者作为与字段名作为关键字数组和现场数据作为价值。
+0

你以前试过这个吗?使用我使用的CURL版本,这将发送“multipart/form-data”中的字段,而不是普通的帖子。 – 2010-04-28 00:41:32

+0

我从来没有尝试过,但PHP文档在记录功能方面确实做得很好。 – 2010-04-29 19:19:11

+1

这是大多数时候的答案。但是,如果您在帖子内容中传递了深层变量(例如“...&var1 [var2] = val&...”),它将不起作用(var1将作为空数组传递)。 ZZCoder的答案在下面(使用'http_build_query()')是(完整的)正确的答案。 – zeh 2012-10-11 15:35:56

12

做到这一点,

curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($_POST)); 
+0

这个伎俩!谢谢。 http_build_query()是必需的,否则它将不起作用。 – acme 2010-10-25 15:37:59

+0

这是正确的答案 – bonez 2013-06-20 18:33:36

0
<?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 
)); 
1

如果有人需要这个,这里是一个新的路线$ _ 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);