{ "cells": [ { "cell_type": "markdown", "id": "f6ff5b25-4eeb-4532-a1bb-ad6a01eb1fe1", "metadata": {}, "source": [ "# Работа данными по сети" ] }, { "cell_type": "markdown", "id": "23637c54-de63-4c0b-af5a-81a1680e6129", "metadata": {}, "source": [ "## Работа с HTTP/HTTPS\n", "\n", "Для работы с HTTP/HTTPS будем использовать модуль `requests`.\n", "\n", "### Отправка запроса" ] }, { "cell_type": "code", "execution_count": null, "id": "0739e8e7-caec-4411-8999-7563df92207f", "metadata": {}, "outputs": [], "source": [ "import requests\n", "\n", "# Выполнение запроса GET (получение данных с сервера)\n", "ret = requests.get('http://site.example.com/page?a=b')\n", "\n", "# Выполнение запроса POST (отправка данных на сервер)\n", "ret = requests.post('http://site.example.com/page',\n", " params={'form':'send',\n", " 'mail':'test@example.com'})\n", "\n", "# Выполнение запроса GET с базовой авторизацией\n", "from requests.auth import HTTPBasicAuth\n", "requests.get('http://site.example.com/page', auth=HTTPBasicAuth('user', 'pass'))\n", "\n", "# Выполнение запросов с поддержкой cookie\n", "s = requests.Session() \n", "ret = s.post('http://site.example.com/login',data={'form':'send', 'user':'test@example.com', 'password':'pass'})\n", "ret = s.get('http://site.example.com/page')" ] }, { "cell_type": "markdown", "id": "3f0d217e-912f-46d9-ab7f-b423f41b4819", "metadata": {}, "source": [ "### Разбор результата" ] }, { "cell_type": "code", "execution_count": null, "id": "81052472-f1ba-4244-90a5-b234c2a096f4", "metadata": {}, "outputs": [], "source": [ "# Код состояния, в случае успеха 2xx, как правило 200\n", "print(ret.status_code)\n", "\n", "# MIME код типа данных ответа, например 'application/json'\n", "print(ret.headers['content-type'])\n", "\n", "# Данные в двоичном виде\n", "print(ret.content)\n", "\n", "# Текстовые данные (например HTML) можно декодировать средствами requests\n", "print(ret.text)" ] }, { "cell_type": "markdown", "id": "876583f9-34bd-44cc-b0d0-2513d4987525", "metadata": {}, "source": [ "## Работа FTP\n", "\n", "Для передачи данных по FTP/FTPS будем использовать модуль стандартной библиотеки ftplib.\n", "\n", "### Установка соединения" ] }, { "cell_type": "code", "execution_count": null, "id": "9a76a336-bdd7-47ce-a356-bfb838bb4e9b", "metadata": {}, "outputs": [], "source": [ "import ftplib\n", " \n", "# Устанавливаем соединение\n", "con = ftplib.FTP(\"ftp.example.com\", \"user\", \"password\")\n", "\n", "# Аналогично для FTPS\n", "con = ftplib.FTP_TLS(\"ftp.example.com\", \"user\", \"password\")\n", "\n", "# Переходим в нужную папку на сервере\n", "con.cwd(\"/var/tmp\")" ] }, { "cell_type": "markdown", "id": "c9a9f610-45f7-448a-abf5-8c22c4238d38", "metadata": {}, "source": [ "### Передача файлов" ] }, { "cell_type": "code", "execution_count": null, "id": "a19f8851-1cb3-4b03-b694-ea5423ff88cc", "metadata": {}, "outputs": [], "source": [ "# Загрузка файла на сервер\n", "fh = open(r\"C:\\upload\\a.txt\", 'rb')\n", "con.storbinary('STOR a.txt', fh)\n", "fh.close()\n", "\n", "# Получение файла с сервера\n", "fh = open(r\"C:\\download\\b.txt\", 'wb')\n", "con.retrbinary('RETR b.txt', fh.write)\n", "fh.close()" ] }, { "cell_type": "markdown", "id": "42bf34a2-4987-43de-98ad-a5711a5ba6b3", "metadata": {}, "source": [ "Любые файлы целесообразно передавать в `binary` режиме FTP. Команды `storbinary` и `retrbinary` принимают не просто имя файла, а соответствующую FTP команду.\n", "\n", "## Работа с SSH и sFTP\n", "\n", "Для работы с ssh используется модуль paramikopip.\n", "\n", "### Подготовка к установке соединения" ] }, { "cell_type": "code", "execution_count": null, "id": "a3a4a616-dd54-48c4-9f7b-2388b0fb14e2", "metadata": {}, "outputs": [], "source": [ "import paramiko\n", "\n", "# Создание клиента\n", "client = paramiko.SSHClient()\n", "\n", "# Опционально - загрузка локальной связки ключей\n", "client.load_system_host_keys()\n", "\n", "# Можно ходить на хосты для которых нет ключей в связке\n", "client.set_missing_host_key_policy(paramiko.WarningPolicy)\n", "\n", "# Автоматически добавлять ключи в связку\n", "client.set_missing_host_key_policy(paramiko.AutoAddPolicy)" ] }, { "cell_type": "markdown", "id": "34fd4037-2563-4825-9385-314bae1e613e", "metadata": {}, "source": [ "### Выполнение команд" ] }, { "cell_type": "code", "execution_count": null, "id": "f0e4a6e3-8db2-4f11-9846-42ce057a1863", "metadata": {}, "outputs": [], "source": [ "# Установка соединения с использованием пароля\n", "client.connect(\"example.net\", port=22, username=\"admin\", password=\"password\")\n", "\n", "# Установка соединения с использованием сертификата\n", "client.connect(hostname, username=myuser, key_filename=\"ssh_key.pub\")\n", "\n", "# Выполнение команд\n", "stdin, stdout, stderr = client.exec_command(\"ls -la\")\n", "\n", "# stdin, stdout, stderr — псевдофайлы\n", "print (stdout.read())\n", "\n", "# Закрываем соединение\n", "client.close()" ] }, { "cell_type": "markdown", "id": "d46f877e-0b1c-4063-a765-893f6d5d9d75", "metadata": {}, "source": [ "### Создание транспорта" ] }, { "cell_type": "code", "execution_count": null, "id": "7035b5f4-879c-41c6-865b-a526ccda13d4", "metadata": {}, "outputs": [], "source": [ "import paramiko\n", "\n", "# Создаем специальный объект - транспорт\n", "transport = paramiko.Transport((\"example.net\", 22))\n", "\n", "# Установка соединения с использованием пароля\n", "transport.connect(username=\"admin\", password=\"password\")\n", "\n", "# Установка соединения с использованием сертификата\n", "transport.connect(username=myuser, key_filename=\"ssh_key.pub\")\n", "\n", "# Получаем объект sftp\n", "\n", "sftp = paramiko.SFTPClient.from_transport(transport)" ] }, { "cell_type": "markdown", "id": "9db4a2ed-ff0e-45df-90bd-1fe31881dd34", "metadata": {}, "source": [ "### Работаем с файлами" ] }, { "cell_type": "code", "execution_count": null, "id": "70878ef1-4dce-45e0-8c07-879177dcf827", "metadata": {}, "outputs": [], "source": [ "# Скачиваем файлы\n", "sftp.get(\"/home/admin/img.jpg\", \"img.jpg\")\n", "\n", "# Загружаем файлы\n", "sftp.put(\"img2.jpg\", \"/home/admin/img2.jpg\")\n", "\n", "# Работаем непосредственно с файлом\n", "fobj = sftp.open(\"/home/admin/img3.jpg\", 'rb')\n", "\n", "# Закрываем\n", "fobj.close()\n", "sftp.close()\n", "transport.close()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.6" } }, "nbformat": 4, "nbformat_minor": 5 }