使用PHP Curl将文件上传到另一台服务器

时间:2017-04-04 08:51:56

标签: php django curl post

我正在尝试完成以下任务:

我有一台运行PHP-Application的服务器。我必须提取一些文件并使用POST请求将它们发送到另一台服务器(Django)。我试图通过使用cURL来实现这一目标。我已经有几个POST请求正在运行,它们都可以根据需要工作,但是一旦我尝试使用文件来完成此操作,我就会遇到问题。

当我尝试使用Multipart和FormData将文件从Javascript发送到我的Django服务器时,一切正常。

我尝试在PHP中使用以下代码:

public function httpPost($url, $data, $multipart) {
        $curl = curl_init($url);
        if ($multipart) {
            // curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));    
            // curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
            // curl_setopt($curl, CURLOPT_INFILE, $file_handle);
        } else {
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
        }
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($curl);
        if ($response === false) {
            var_dump(curl_error($curl));
        }
        curl_close($curl);
}

从上面的代码片段中可以看出,我正在尝试将Header设置为Multipart并相应地设置数据。

我已经尝试了以下事项:

  • 使用fopen / fread将文件加载到PHP中,然后在$data数组中设置它。然后该文件也出现在Django服务器上,但在request.POST vars中而不在request.FILES vars中。
  • 将文件加载到CurlFile。然后只有文件路径出现在Django Server

总是当我设置multipart时,Django服务器无法解析request.BODY

有人可以帮忙吗?

0 个答案:

没有答案