使用CURL和PHP将文件发送到HTTPS URL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用CURL和PHP将文件发送到HTTPS URL相关的知识,希望对你有一定的参考价值。

我试图使用以下代码将文件发送到Https URL:

$file_to_upload = array('file_contents'=>'@'.$target_path); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $target_url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSER, FALSE);
curl_setopt($ch, CURLOPT_UPLOAD, TRUE);
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'file='.$file_to_upload); 
$result = curl_exec($ch); 
$error = curl_error($ch);
curl_close ($ch); 
echo " Server response: ".$result; 
echo " Curl Error: ".$error;

但由于某种原因,我得到了这样的回应:

Curl Error: Failed to open/read local data from file/application

任何建议都会有所帮助!

更新:当我取出CURLOPT_UPLOAD时,我从目标服务器得到响应,但它说有效负载中没有文件

答案

你向CURLOPT_POSTFIELDS传递了一个相当奇怪的论点。尝试更像的东西:

<?
$postfields = array('file' => '@' . $target_path);
// ...
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
?>

此外,您可能希望CURLOPT_RETURNTRANSFERtrue,否则$ result将无法获得输出,而是将其直接发送到缓冲区/浏览器。

来自php.net的This example也可能有用:

<?php

$ch = curl_init();

$data = array('name' => 'Foo', 'file' => '@/home/user/test.png');

curl_setopt($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);
?>
另一答案

除了核心答案之外:

根据how to upload file using curl with php,从PHP 5.5开始,你需要使用curl_file_create($path)而不是"@$path"

经过测试:确实有效。

使用@方式,没有文件上传。

以上是关于使用CURL和PHP将文件发送到HTTPS URL的主要内容,如果未能解决你的问题,请参考以下文章

PHP cURL无法向api发送POST请求

如何通过 curl 在 url 中发送文件?

关于在php中使用curl发送get请求时参数传递问题的解析

使用 PHP cURL 将文件上传到 Google 签名 URL

使用 PHP curl 发送 xml 请求

PHP使用CURL详解