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请求,代理只需 我已成功 将文件传递给代理 - 但是,因为它是通过 下面代理的相关代码段: p>
我遇到的问题, 我不确定如何在 任何帮助都将不胜感激!
div> json_decode code> PHP输入流(php:// input)作为Angular 将POST数据序列化为JSON,通过
http_build_query code>传递,然后通过cURL将其转发给API - 到目前为止,它一直运行良好。 p>
multipart / form-data code>标头发送的,它只能在
$ _ FILES code>中使用,而不是输入流。 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>
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);