Laboratory work #3: TCP/UDP, HTTP requests, Gitea API

This commit is contained in:
Полина Ончурова 2026-04-16 23:11:14 +03:00
commit d811b20d8f
9 changed files with 137 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
.venv/
.env
__pycache__/
*.pyc
.vs/
.vscode/

32
README.md Normal file
View File

@ -0,0 +1,32 @@
# Laboratory work #3: Network connections in Python
## Completed tasks
1. **TCP client-server** (port 10000)
2. **UDP client-server** (port 10001)
3. **HTTP requests** (vyatsu.ru)
4. **Gitea API** (repository creation)
## How to run
```bash
# Activate virtual environment
.venv\Scripts\activate
# Run TCP
py tcp_server.py
py tcp_client.py
# Run UDP
py udp_server.py
py udp_client.py
# HTTP requests
py http_socket.py
py http_requests.py
# Gitea API (add token to .env first)
py gitea_api.py
## Author
Îí÷óðîâà Ïîëèíà Àëåêñååâíà, ÈÍÁá-2301-02-00

44
gitea_api.py Normal file
View File

@ -0,0 +1,44 @@
import os
import requests
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('GITEA_TOKEN')
BASE_URL = os.getenv('GITEA_URL', 'https://git.vyatsu.ru')
def get_user_info():
headers = {"Authorization": f"token {TOKEN}"}
response = requests.get(f"{BASE_URL}/api/v1/user", headers=headers)
if response.status_code == 200:
user = response.json()
print(f"User: {user.get('login')}")
print(f"Email: {user.get('email')}")
return user
else:
print(f"Error: {response.status_code}")
return None
def create_repository(repo_name):
headers = {
"Authorization": f"token {TOKEN}",
"Content-Type": "application/json"
}
data = {
"name": repo_name,
"description": "Laboratory work #3: Network programming",
"private": False
}
response = requests.post(f"{BASE_URL}/api/v1/user/repos", headers=headers, json=data)
if response.status_code == 201:
repo = response.json()
print(f"Repository created: {repo.get('html_url')}")
return repo
else:
print(f"Error: {response.status_code}")
return None
if __name__ == "__main__":
user = get_user_info()
if user:
create_repository(f"lab3-{user.get('login')}")

4
http_requests.py Normal file
View File

@ -0,0 +1,4 @@
import requests
response = requests.get("http://vyatsu.ru")
print(response.text[:500])

9
http_socket.py Normal file
View File

@ -0,0 +1,9 @@
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('vyatsu.ru', 80))
request = "GET / HTTP/1.1\r\nHost: vyatsu.ru\r\n\r\n"
client.sendall(request.encode())
response = client.recv(4096)
print(response.decode())
client.close()

8
tcp_client.py Normal file
View File

@ -0,0 +1,8 @@
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 10000))
client.sendall(b'hello server')
data = client.recv(1024)
print(f"Server response: {data.decode()}")
client.close()

17
tcp_server.py Normal file
View File

@ -0,0 +1,17 @@
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("0.0.0.0", 10000))
server.listen(1)
print("TCP server started on port 10000")
while True:
conn, addr = server.accept()
print(f"Connection from {addr}")
data = conn.recv(1024)
if not data:
break
conn.sendall(data.upper())
conn.close()
if data.upper() == b'EXIT':
break

7
udp_client.py Normal file
View File

@ -0,0 +1,7 @@
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b'hello server', ('127.0.0.1', 10001))
data, _ = client.recvfrom(1024)
print(f"Server response: {data.decode()}")
client.close()

10
udp_server.py Normal file
View File

@ -0,0 +1,10 @@
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('0.0.0.0', 10001))
print("UDP server started on port 10001")
while True:
data, addr = server.recvfrom(1024)
print(f"Message from {addr}: {data.decode()}")
server.sendto(data.upper(), addr)