Продемонстрируем curl запрос на примере, с учетом следующих ограничений.
1. Файл надо загрузить методом POST
2. Необходима авторизация
3. На сервере установлен сертификат ssl
Способ 1, командная строка: Загрузка файла непосредственно через командную строку выглядит так:
curl -i -u user:password -X POST --form datafile=@/path/to/some/file.txt https://localhost:443/page --insecure
Разберем подробнее:
-X — указываем метод POST
-u — логин и пароль пользователя
—insecure — при работе по https часто приходится тестировать в тестовом окружении где не стоит проверенный сертификат. Этой опцией отказываемся от проверки.
Чтобы ещё более подробно узнать о тонкостях команды, используйте curl —help
Способ 2, PHP: Продемонстрируем как загрузить файл
// очень полезно предварительно сделать проверку на наличие библиотеки curl для php if (!in_array ('curl', get_loaded_extensions())) { exit("CURL is NOT installed on this server"); } $ch = curl_init(); //указываем url адрес на сервере curl_setopt($ch, CURLOPT_URL, 'https://localhost:443/page'); // чтобы возвращало curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // указываем метод POST curl_setopt($ch, CURLOPT_POST, 1); // этот параметр для указания логина и пароля curl_setopt($ch, CURLOPT_USERPWD, "login:password"); curl_setopt($ch, CURLOPT_POSTFIELDS, [ 'some_more_data' => 'здесь можно передать дополнительные параметры, например если эмулируется отправка формы', 'datafile' => curl_file_create('/path/to/file.txt' , mime_content_type($path_to_file), basename('/path/to/file')) ] ); // проверка peer для ssl отключена, смотрите также CURLOPT_SSL_VERIFYHOST для полного игнорирования ssl сертификата curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // все опции выставлены - выполняем запрос $result = curl_exec($ch); // распечатываем ответ сервера var_dump($result); // закрываем соединение curl_close($ch);
Практически всё прокомментировано в коде, однако отмечу функцию curl_file_create , один сервер постоянно ругался что файл как-то не так указан или отсутсвует. Это вылечилось добавлением мим типа, т.е. функция curl_file_create создает дополнительные заголовки для корректной отправки файла.
Способ 3, Python : Наконец дошли до python, здесь воспользуемя отличной библиотекой requests
import requests auth = ('user', 'password') data = [ ('some_more_field', 'some_field_data') ] # curl request files = {'datafile': open('/path/to/file.txt', 'rb')} r = requests.post('https://localhost:443/page', files=files, data=data, auth=auth) print(r.text)
В указанном примере открываем файл в режиме бинарного чтения, и дальше сразу делаем запроc. В запросе указаны параметры авторизации, метод, страница и файл. Если файлов несколько — просто расширьте словарь files.
Всё просто, удачи с curl!