У меня есть приложение PHP (Laravel Framework), и когда на моем сайте делается запрос, я хочу сделать точно такой же запрос с CURL, но изменить только URL. Это включает:
Я начал писать свой собственный код, как это:
<?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 () с этим.
Задача ещё не решена.
Других решений пока нет …