PHP当前请求转换为CURL

时间:2016-09-23 15:24:14

标签: php curl request copy replicate

我有一个PHP(Laravel框架)应用程序,当我的网站上发出请求时,我想用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()。

0 个答案:

没有答案