Лабораторная №3: сокеты, запросы и API
This commit is contained in:
parent
338a87723e
commit
377fe851f8
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,4 @@
|
||||
venv/
|
||||
__pycache__/
|
||||
.env
|
||||
*.pyc
|
||||
*.pyc
|
||||
|
||||
20
README.md
20
README.md
@ -0,0 +1,20 @@
|
||||
# Лабораторная 3: socket и requests
|
||||
|
||||
## Подготовка окружения
|
||||
- python -m venv venv
|
||||
- venv\Scripts\activate (или source venv/bin/activate)
|
||||
- pip install requests
|
||||
|
||||
## TCP/UDP серверы и клиенты
|
||||
- tcp_server.py / tcp_client.py — обмен строками по TCP на порту 10000
|
||||
- udp_server.py / udp_client.py — обмен строками по UDP на порту 10001
|
||||
|
||||
## HTTP через socket
|
||||
- http_client_socket.py — GET / к vyatsu.ru через socket, порт 80
|
||||
|
||||
## HTTP через requests
|
||||
- http_client_requests.py — GET к http://vyatsu.ru через библиотеку requests
|
||||
|
||||
## Git API
|
||||
- git_api.py — запрос к https://git.vyatsu.ru/api/v1/user
|
||||
- Требуется переменная окружения GIT_VYATSU_TOKEN с токеном (read-only)
|
||||
15
git_api.py
15
git_api.py
@ -0,0 +1,15 @@
|
||||
import os
|
||||
import requests
|
||||
|
||||
def main():
|
||||
token = os.environ.get("GIT_VYATSU_TOKEN_READ")
|
||||
if not token:
|
||||
raise RuntimeError("Переменная окружения GIT_VYATSU_TOKEN_READ не установлена")
|
||||
|
||||
headers = {"Authorization": f"token {token}"}
|
||||
response = requests.get("https://git.vyatsu.ru/api/v1/user", headers=headers)
|
||||
print("Status code:", response.status_code)
|
||||
print(response.json())
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
31
git_create_repo.py
Normal file
31
git_create_repo.py
Normal file
@ -0,0 +1,31 @@
|
||||
import os
|
||||
import requests
|
||||
|
||||
def main():
|
||||
token = os.environ.get("GIT_VYATSU_TOKEN_WRITE")
|
||||
if not token:
|
||||
raise RuntimeError("Переменная окружения GIT_VYATSU_TOKEN_WRITE не установлена")
|
||||
|
||||
headers = {
|
||||
"Authorization": f"token {token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
data = {
|
||||
"name": "practice03-api-mamaev",
|
||||
"description": "Репозиторий создан через API Gitea для лабораторной работы",
|
||||
"private": False,
|
||||
"auto_init": True
|
||||
}
|
||||
|
||||
response = requests.post(
|
||||
"https://git.vyatsu.ru/api/v1/user/repos",
|
||||
headers=headers,
|
||||
json=data
|
||||
)
|
||||
|
||||
print("Status code:", response.status_code)
|
||||
print(response.json())
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,16 @@
|
||||
import requests
|
||||
|
||||
def main():
|
||||
url = "http://vyatsu.ru"
|
||||
response = requests.get(url)
|
||||
|
||||
print("Status code:", response.status_code)
|
||||
print("Headers:")
|
||||
for k, v in response.headers.items():
|
||||
print(f"{k}: {v}")
|
||||
|
||||
print("\nBody snippet:")
|
||||
print(response.text[:500])
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,30 @@
|
||||
import socket
|
||||
|
||||
HOST = "vyatsu.ru"
|
||||
PORT = 80
|
||||
|
||||
def main():
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
client.connect((HOST, PORT))
|
||||
|
||||
request = (
|
||||
"GET / HTTP/1.1\r\n"
|
||||
f"Host: {HOST}\r\n"
|
||||
"Connection: close\r\n"
|
||||
"\r\n"
|
||||
)
|
||||
|
||||
client.sendall(request.encode())
|
||||
|
||||
response = b""
|
||||
while True:
|
||||
chunk = client.recv(4096)
|
||||
if not chunk:
|
||||
break
|
||||
response += chunk
|
||||
|
||||
print(response.decode(errors="ignore"))
|
||||
client.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,18 @@
|
||||
import socket
|
||||
|
||||
HOST = "127.0.0.1"
|
||||
PORT = 10001
|
||||
|
||||
def main():
|
||||
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
while True:
|
||||
msg = input("Введите сообщение (EXIT для выхода): ")
|
||||
client.sendto(msg.encode(), (HOST, PORT))
|
||||
data, _ = client.recvfrom(1024)
|
||||
print(f"Ответ от сервера: {data.decode()}")
|
||||
if msg.upper() == "EXIT":
|
||||
break
|
||||
client.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,17 @@
|
||||
import socket
|
||||
|
||||
HOST = "0.0.0.0"
|
||||
PORT = 10001
|
||||
|
||||
def main():
|
||||
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
server.bind((HOST, PORT))
|
||||
print(f"UDP сервер запущен на {HOST}:{PORT}")
|
||||
|
||||
while True:
|
||||
data, addr = server.recvfrom(1024)
|
||||
print(f"Сообщение от {addr}: {data.decode()}")
|
||||
server.sendto(data.upper(), addr)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Reference in New Issue
Block a user