Работа данными по сети
Работа с 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()
net.txt · Последнее изменение: 2021/03/18 16:04 — root
Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 4.0 International