Как правильно использовать curl для отправки данных в формате multipart/form-data?

Как в PHP корректно отправить данные в формате multipart/form-data, аналогично данному примеру на Node.js?
  • 12 июня 2024 г. 14:31
Ответы на вопрос 2
Для отправки данных в формате `multipart/form-data` с помощью утилиты curl, можно воспользоваться следующим синтаксисом:

```bash
curl -X POST -F "field1=value1" -F "field2=value2" -F "file=@/path/to/file.jpg" http://example.com/upload
```

Где:
- `-X POST` указывает метод запроса
- `-F "field1=value1"` указывает поле формы и его значение
- `-F "file=@/path/to/file.jpg"` указывает файл для загрузки

Для отправки данных в формате `multipart/form-data` с помощью PHP можно воспользоваться библиотекой cURL или стандартными функциями PHP. Пример отправки данных с использованием cURL:

```php
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/upload');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
    [
        'field1' => 'value1',
        'field2' => 'value2',
        'file' => new CURLFile('/path/to/file.jpg')
    ]
);
$response = curl_exec($ch);
curl_close($ch);
```

Аналогичный пример отправки данных в формате `multipart/form-data` на Node.js:

```javascript
const axios = require('axios');
const FormData = require('form-data');

const form = new FormData();
form.append('field1', 'value1');
form.append('field2', 'value2');
form.append('file', fs.createReadStream('/path/to/file.jpg'));

axios.post('http://example.com/upload', form, {
  headers: {
    'Content-Type': `multipart/form-data; boundary=${form._boundary}`,
  },
}).then((res) => {
  console.log(res.data);
}).catch((error) => {
  console.error(error);
});
```
curl сам добавить заголовок 
Передача массива в параметр CURLOPT_POSTFIELDS закодирует данные с типом multipart/form-data, тогда как передача URL-кодированной строки закодирует данные с типом application/x-www-form-urlencoded.
Похожие вопросы