如何使用PHP Curl发送表单字段和文件?
我正在尝试使用php curl将表单字段和文件发送到web服务。表单已经从浏览器传递到代理php客户端web应用,我正在尝试将其转发到web服务 当我将数组传递给curl_setopt时,如下所示:如何使用PHP Curl发送表单字段和文件?,php,curl,Php,Curl,我正在尝试使用php curl将表单字段和文件发送到web服务。表单已经从浏览器传递到代理php客户端web应用,我正在尝试将其转发到web服务 当我将数组传递给curl_setopt时,如下所示: curl\u setopt($this->ch,CURLOPT\u POSTFIELDS,$this->fields) 我得到了一个要字符串的数组,尽管它是用来获取数组的。这是传递给构造函数中$this->fields的数组 $fields = array('title'=>$title, '
curl\u setopt($this->ch,CURLOPT\u POSTFIELDS,$this->fields)代码>
我得到了一个要字符串的数组,尽管它是用来获取数组的。这是传递给构造函数中$this->fields的数组
$fields = array('title'=>$title,
'content'=>$content,
'category'=>$category,
'attachment'=>$_FILES['attachment']);
如果我使用http\u build\u query
传递字符串,我的web服务会抱怨没有多部分/表单数据
如果我随后使用curl\u setopt
强制使用多部分/表单enctype,我会得到一个错误,说没有边界:
org.apache.commons.fileupload.FileUploadException:请求被拒绝,因为找不到多部分边界
有什么想法吗?使用下面的代码显示要字符串的数组通知:
$fields = array(
'title'=>$title,
'content'=>$content,
'category'=>$category,
'attachment'=>$_FILES['attachment']
);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $fields);
这不是因为您将数组作为第三个参数传递给curl_setopt:而是因为您将数组传递给附件
如果要以这种方式传递文件,应传递其绝对路径,在其前面预先挂起一个@
:
$fields = array(
'title'=>$title,
'content'=>$content,
'category'=>$category,
'attachment'=> '@' . $_FILES['attachment']
);
curl_setopt($this->ch, CURLOPT_POSTFIELDS, $fields);
(这是假设$\u FILES['attachment']
包含文件的完整路径——如果需要,由您更改此代码以使其使用正确的数据)
作为参考,引用的手册页,对于CURLOPT_POSTFIELDS
选项:
要在HTTP“post”操作中发布的完整数据。
要发布文件,请在文件名前面加上@
并使用完整路径。
这可以作为urlencoded字符串(如'para1=val1¶2=val2&…')传递,也可以作为字段名为键、字段数据为值的数组传递。
如果值是数组,则内容类型
标题将设置为多部分/表单数据
试试这个
$filePath = "abc\\xyz.txt";
$postParams["uploadfile"] = "@" . $filePath;
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, 'https://website_address');
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $postParams);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
if (curl_errno($ch))
{
echo curl_error($ch);
exit();
}
curl_close($ch);
谢谢,我现在用@传递文件名,但仍然得到多部分边界错误。