Перевод текущего запроса PHP в CURL

У меня есть приложение PHP (Laravel Framework), и когда на моем сайте делается запрос, я хочу сделать точно такой же запрос с CURL, но изменить только URL. Это включает:

  • заголовки
  • Данные POST (если есть)
  • загруженные файлы (если есть)
  • что-нибудь еще, что Запрос содержал бы

Я начал писать свой собственный код, как это:

<?php
$url = $request->fullUrl(); // Current URL

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, "http://otherurlhere.com/");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request->method());

if ($request->method() == "POST") {
$fields_string = "";
$fields = $request->all();

curl_setopt($ch,CURLOPT_POST, true);

if (count($request->files)) {
foreach ($_FILES as $key => $file) {
if (is_array($file['name'])) {
foreach ($file['name'] as $key2 => $value2) {
$tmpfile = $_FILES[$key]['tmp_name'][$key2];
$filename = basename($_FILES[$key]['name'][$key2]);
$fields[$key] = '@'.$tmpfile.';filename='.$filename;
}
}
else {
$tmpfile = $_FILES[$key]['tmp_name'];
$filename = basename($_FILES[$key]['name']);
$fields[$key] = '@'.$tmpfile.';filename='.$filename;
}
}
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields);
}
else {
$fields_string = http_build_query($fields);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
}
}

$headers = [];
foreach ($request->headers->all() as $key => $header) {
$headers = [];
foreach ($request->headers->all() as $key => $header) {
$headers[] = $key.": ".$header[0];
}

if (count($headers) > 0) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}

curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$response = curl_exec($ch);

$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);

$headers = explode("\n", $header);

foreach ($headers as $header) {
if (!empty($header))
if (substr($header, 0, 12) == "Content-Type")
header($header);
}echo $body;

//close connection
curl_close($ch);

exit();
?>

Но если мне кажется, что я слишком усложняю вещи, плюс часть загрузки файлов на самом деле не работает, так что мне интересно, есть ли у кого-нибудь новое очень простое решение, которое просто скопировало бы все в реплике PHP CURL.

Даже если это то же самое, что и функциональность «Chrome copy as CURL», и это даст мне команду. Это было бы здорово, потому что я мог бы использовать exec () с этим.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]