使用PHP curl发送多部分表单数据


(multipart/Form data)
Files - array
Answer - string
$postData = array();
$postData["Answer"] = $text;

foreach ($images as $index => $file) {
$postData['Files[' . $index . ']'] = curl_file_create(
$file,
$functions->mime_type($file),
pathinfo($file, PATHINFO_FILENAME)
);
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $user . ":" . $password); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('merchantId:98765431'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch ,CURLOPT_URL ,"https://...");
$response = curl_exec($ch);

尝试发布多表单数据。请求失败并打印错误& post字段& answer &;invalid"。你能帮忙吗?

回答得好

要发布带有curl的multipart,你需要使用像这样的header

$headers = array("Content-Type:multipart/form-data");
if (isset($_POST['btnUpload'])){
$url = "URL_PATH of upload.php"; // e.g. request URL http://localhost/myuploader/upload.php
$filename = $_FILES['file']['name'];
$filedata = $_FILES['file']['tmp_name'];
$filesize = $_FILES['file']['size'];
if ($filedata != ''){
$headers = array("Content-Type:multipart/form-data"); // cURL headers for file uploading
$postfields = array("filedata" => "@$filedata", "filename" => $filename);
$ch = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => true,
CURLOPT_POST => 1,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $postfields,
CURLOPT_INFILESIZE => $filesize,
CURLOPT_RETURNTRANSFER => true
); // cURL options
curl_setopt_array($ch, $options);
curl_exec($ch);
if(!curl_errno($ch)) {
$info = curl_getinfo($ch);
if ($info['http_code'] == 200)
$errmsg = "File uploaded successfully";
} else {
$errmsg = curl_error($ch);
}
curl_close($ch);
} else {
$errmsg = "Please select the file";
}
}

对于您的情况,只需将"Content-Type:multipart/form-data"添加到函数

$postData = array();
$postData["Answer"] = $text;
foreach ($images as $index => $file) {
$postData['Files[' . $index . ']'] = curl_file_create(
$file,
$functions->mime_type($file),
pathinfo($file, PATHINFO_FILENAME)
);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $user . ":" . $password); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:multipart/form-data",'merchantId:98765431')); //HERE THE ADD
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch ,CURLOPT_URL ,"https://...");
$response = curl_exec($ch);