2010-04-27 12 views
9

मुझे अपनी PHP स्क्रिप्ट पर POST अनुरोध प्राप्त होता है और पोस्ट पोस्ट का उपयोग करके इस पोस्ट कॉल को दूसरी स्क्रिप्ट पर अग्रेषित करना चाहूंगा। यह कैसे करना है? यदि इस क्रिया के लिए आवश्यक है तो मैं curl का उपयोग कर सकता हूं।

+0

क्या आपके PHP स्क्रिप्ट को अग्रेषित POST से वापस भेजी गई प्रतिक्रिया तक पहुंच की आवश्यकता है? – webbiedave

उत्तर

12
शायद

:

curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); 

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

यह या तो की तरह एक urlencoded स्ट्रिंग के रूप में पारित किया जा सकता 'para1 = VAL1 & para2 = val2 और ...' या कुंजी के रूप में क्षेत्र के नाम के साथ एक सरणी के रूप में और फ़ील्ड डेटा मूल्य के रूप में।
+0

क्या आपने पहले यह कोशिश की है? कर्ल I का उपयोग करने के संस्करण के साथ, यह फ़ील्ड "मल्टीपार्ट/फॉर्म-डेटा" में भेजेगा, नियमित पोस्ट नहीं। –

+0

मैंने पहले कभी कोशिश नहीं की है, लेकिन PHP दस्तावेज़ कार्यक्षमता को दस्तावेज करने का अच्छा काम करता है। –

+1

यह ज्यादातर बार जवाब है। हालांकि, यदि आपके पास पोस्ट सामग्री में गहरे चर शामिल हैं (उदा। "... और var1 [var2] = val & ...") यह काम नहीं करेगा ('var1' खाली सरणी के रूप में पारित किया जाएगा)। ZZCoder का उत्तर नीचे ('http_build_query()' का उपयोग करके) (पूर्ण) सही उत्तर है। – zeh

12

ऐसा करें,

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

यह चाल है! धन्यवाद। http_build_query() आवश्यक है, अन्यथा यह काम नहीं करेगा। – acme

+0

यह सही उत्तर है – bonez

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

किसी को भी इस की जरूरत है, यहाँ एक पूरी तरह कार्यात्मक cURL अनुरोध है कि फिर से मार्गों $ _POST जहां (ऊपर जेडजेड सांकेतिक शब्दों में बदलनेवाला के जवाब के आधार पर) चाहते

$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); 
है