====== Работа данными по сети ====== ===== Работа с HTTP ===== Для работы с HTTP/HTTPS будем использовать модуль requestspip. ==== Отправка запроса ==== import requests # Выполнение запроса GET (получение данных с сервера) ret = requests.get('http://site.example.com/page?a=b') # Выполнение запроса POST (отправка данных на сервер) ret = requests.post('http://site.example.com/page', params={'form':'send', 'mail':'test@example.com'}) # Выполнение запроса GET с базовой авторизацией from requests.auth import HTTPBasicAuth requests.get('http://site.example.com/page', auth=HTTPBasicAuth('user', 'pass')) # Выполнение запросов с поддержкой cookie s = requests.Session() ret = s.post('http://site.example.com/login',data={'form':'send', 'user':'test@example.com', 'password':'pass'}) ret = s.get('http://site.example.com/page')
==== Разбор результата ==== # Код состояния, в случае успеха 2xx, как правило 200 print(ret.status_code) # MIME код типа данных ответа, например 'application/json' print(ret.headers['content-type']) # Данные в двоичном виде print(ret.content) # Текстовые данные (например HTML) можно декодировать средствами requests print(ret.text)
===== Работа FTP ===== Для передачи данных по FTP/FTPS будем использовать модуль стандартной библиотеки ftplib. ==== Установка соединения ==== import ftplib # Устанавливаем соединение con = ftplib.FTP("ftp.example.com", "user", "password") # Аналогично для FTPS con = ftplib.FTP_TLS("ftp.example.com", "user", "password") # Переходим в нужную папку на сервере con.cwd("/var/tmp")
==== Передача файлов ==== # Загрузка файла на сервер fh = open(r"C:\upload\a.txt", 'rb') con.storbinary('STOR a.txt', fh) fh.close() # Получение файла с сервера fh = open(r"C:\download\b.txt", 'wb') con.retrbinary('RETR b.txt', fh.write) fh.close() Любые файлы целесообразно передавать в binary режиме FTP. Команды ''storbinary'' и ''retrbinary'' принимают не просто имя файла, а соответствующую FTP команду.
===== Работа с SSH и sFTP ===== Для работы с ssh используется модуль ''paramiko''pip. ==== Подготовка к установке соединения ==== import paramiko # Создание клиента client = paramiko.SSHClient() # Опционально - загрузка локальной связки ключей client.load_system_host_keys() # Можно ходить на хосты для которых нет ключей в связке client.set_missing_host_key_policy(paramiko.WarningPolicy) # Автоматически добавлять ключи в связку client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
==== Выполнение команд ==== # Установка соединения с использованием пароля client.connect("example.net", port=22, username="admin", password="password") # Установка соединения с использованием сертификата client.connect(hostname, username=myuser, key_filename="ssh_key.pub") # Выполнение команд stdin, stdout, stderr = client.exec_command("ls -la") # stdin, stdout, stderr — псевдофайлы print (stdout.read()) # Закрываем соединение client.close()
==== Создание транспорта ==== import paramiko # Создаем специальный объект - транспорт transport = paramiko.Transport(("example.net", 22)) # Установка соединения с использованием пароля transport.connect(username="admin", password="password") # Установка соединения с использованием сертификата transport.connect(username=myuser, key_filename="ssh_key.pub") # Получаем объект sftp sftp = paramiko.SFTPClient.from_transport(transport)
==== Работаем с файлами ==== # Скачиваем файлы sftp.get("/home/admin/img.jpg", "img.jpg") # Загружаем файлы sftp.put("img2.jpg", "/home/admin/img2.jpg") # Работаем непосредственно с файлом fobj = sftp.open("/home/admin/img3.jpg", 'rb') # Закрываем fobj.close() sftp.close() transport.close()