PHP curl是一个常用的网络请求工具,它支持发送multipart请求,包括上传文件、表单数据等操作。在一些项目开发中,我们需要向服务器发送multipart,比如一个表单包括文件和其他数据的提交请求,这时就需要使用php curl发送multipart请求。
使用php curl的multipart请求有很多方式,下面我会详细介绍两种常用的方式,帮助读者更好的理解。
方式一:使用curl_file_create函数
$file_path = '/path/to/file.jpg"\r\n";$content_type = 'multipart/form-data; boundary=' . $boundary;$data = '';foreach ($post_data as $name =>$value) {$data .= $delimiter;$data .= 'Content-Disposition: form-data; name="' . $name . "\"\r\n\r\n";$data .= $value . "\r\n";}$data .= $delimiter;$data .= 'Content-Disposition: form-data; name="' . $file_field . '"; filename="' . basename($file_path) . '"' . "\r\n";$data .= 'Content-Type: ' . mime_content_type($file_path) . "\r\n\r\n";$data .= file_get_contents($file_path) . "\r\n";$data .= $delimiter . '--';$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'http://example.com');curl_setopt($ch, CURLOPT_POST, true);curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: ' . $content_type]);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);$result = curl_exec($ch);
这种方式是手动构造了multipart请求的内容。其中,我们首先获取了文件的绝对路径和文件字段名,然后将其他表单数据封装到$post_data数组中。接着,我们使用uniqid函数生成了一个唯一标识符$boundary和分割线$delimiter,并设置了Content-Type为multipart/form-data;并将$post_data、$file_path等参数按照multipart请求的格式组装,最后将组装好的请求content设置到CURLOPT_POSTFIELDS选项中并使用curl_exec()发起请求。
总结
以上就是php curl发送multipart请求的两种常用方式了。第一种是使用curl_file_create函数,适用于简单的文件上传,但不支持上传多个文件。第二种是手动构造multipart请求,适用于上传单个或多个文件及其他表单数据。