Tôi nhận được yêu cầu POST tại tập lệnh PHP của mình và muốn chuyển tiếp cuộc gọi này tới một tập lệnh khác bằng POST. làm như thế nào? Tôi có thể sử dụng cURL nếu nó được yêu cầu cho hành động này.
Trả lời
lẽ:
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
http://www.php.net/manual/en/function.curl-setopt.php
này có thể được thông qua như là một chuỗi urlencoded như 'para1 = VAL1 & para2 = VAL2 & ...' hoặc như là một mảng với tên trường là chìa khóa và trường dữ liệu dưới dạng giá trị.
Bạn đã thử điều này trước đây chưa? Với phiên bản CURL I sử dụng, điều này sẽ gửi các trường trong "multipart/form-data", không phải là bài đăng thông thường. –
Tôi chưa bao giờ thử nó trước đây, nhưng tài liệu PHP không thực hiện tốt công việc ghi lại chức năng. –
Đây là câu trả lời hầu hết các lần. Tuy nhiên, nếu bạn có các biến sâu được chuyển trong nội dung bài đăng (ví dụ: "... & var1 [var2] = val & ...") thì nó sẽ không hoạt động ('var1' sẽ được chuyển thành một mảng trống). Câu trả lời của ZZCoder dưới đây (sử dụng 'http_build_query()') là câu trả lời đúng (đầy đủ). – zeh
<?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
));
Nếu ai cần này, đây là một yêu cầu cURL đầy đủ chức năng mà lại tìm đường khác $ _POST nơi bạn muốn (dựa trên câu trả lời ZZ coder của trên)
$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);
Tập lệnh PHP của bạn có cần quyền truy cập vào phản hồi được gửi lại từ POST được chuyển tiếp không? – webbiedave