我这里有一个小问题,如何告诉cURL专门将文件附加到请求?
如果我使用cURL上传文件,那么通常的方法是将其作为POST数据数组的一部分附加,其值前面带有@,例如:
CURLOPT_POSTFIELDS=>array('my-file'=>'@my-file.txt')
这显然有效,但我有两个问题:
cURL CURLOPT_INFILE不是一个选项,因为它不会显示为$ _FILES数组的一部分。
在cURL中似乎有一个漏洞依赖于POST字段值中的@符号。有办法解决吗?为什么没有CURLOPT_FILEFIELDS数组?命令行cURL有一个单独的标志(-F),但由于某种原因,我不认为它是PHP中的一个选项。
非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
如果有人在Google上找到此结果后(如我所知)在2019年及以后查看此问题,则该问题已按照this bug fix解决。
您现在可以使用CURLFile通过PHP CURL请求发送文件,如下所示:
$fullpath = '/var/www/html/website/test.png';
$mime = 'image/png';
$publicname = 'testpic';
$cfile = curl_file_create($fullpath,$mime,$publicname);
$fields[$publicname] = curl_file_create($fullpath,$mime,$publicname);
然后将在其中使用
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
可以找到更多信息here。
答案 1 :(得分:1)
我最终做的是检测是否有任何输入数据以@符号开头,如果是,则将它们作为GET变量提交(作为cURL中提交URL的一部分)。它对所有情况都没有帮助(比如当提交一个以@开头的大字符串时),但是切断了Twitter处理的问题。