PHP代理 - 使用cURL上传文件

问题描述:

I'm currently building an application written in AngularJS with a Laravel based API for the backend, data is passed via a simple PHP proxy to keep my API key secure(ish).

For POST requests the proxy simply json_decode PHPs input stream (php://input) as Angular serialises POST data to JSON, passes it through http_build_query then forwards it via cURL to the API - so far, it's been working flawlessly.

I've managed to get the file over to the proxy - however, as it's sent with multipart/form-data headers, it's only available in $_FILES and not the input stream.

Relevant snippets from the proxy below:

function curlRequest($url, $post = false, $data = null)
{
  $ch = curl_init();

  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  if($post == true) {
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  }

  $data = curl_exec($ch);
  $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

  curl_close($ch);
}

$data = json_decode(file_get_contents('php://input'), true);
$data['api_key'] = API_KEY;

// File data available here!
var_dump($_FILES);

$result = curlRequest(URL, true, $data);

The problem I'm having, I'm unsure how to correctly POST the file to the API endpoint once I've got it in $_FILES.

Any help would be greatly appreciated!

我正在构建一个用AngularJS编写的应用程序,后端使用基于Laravel的API,数据通过 简单的PHP代理保证我的API密钥安全(ish)。 p>

对于POST请求,代理只需 json_decode code> PHP输入流(php:// input)作为Angular 将POST数据序列化为JSON,通过 http_build_query code>传递,然后通过cURL将其转发给API - 到目前为止,它一直运行良好。 p>

我已成功 将文件传递给代理 - 但是,因为它是通过 multipart / form-data code>标头发送的,它只能在 $ _ FILES code>中使用,而不是输入流。 p >

下面代理的相关代码段: p>

  function curlRequest($ url,$ post = false,$ data = null)
 {
  $ ch = curl_init(); 
 
 curl_setopt($ ch,CURLOPT_URL,$ url); 
 curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true); 
 
 if($ post == true){
 curl_setopt  ($ ch,CURLOPT_POST,1); 
c  url_setopt($ ch,CURLOPT_POSTFIELDS,http_build_query($ data)); 
} 
 
 $ data = curl_exec($ ch); 
 $ httpcode = curl_getinfo($ ch,CURLINFO_HTTP_CODE); 
 
 curl_close($  ch); 
} 
 
 $ data = json_decode(file_get_contents('php:// input'),true); 
 $ data ['api_key'] = API_KEY; 
 
 //文件数据可用 在这里!
var_dump($ _ FILES); 
 
 $ result = curlRequest(URL,true,$ data); 
  code>  pre> 
 
 

我遇到的问题, 我不确定如何在 $ _ FILES code>中将文件正确地发布到API端点。 p>

任何帮助都将不胜感激! div>

This may send files over as well :

$data = json_decode(array_merge($_REQUEST, $_FILES));
$data['api_key'] = API_KEY;

// File data available here!
var_dump($_FILES);

$result = curlRequest(URL, true, $data);