Laboratory work #3: TCP/UDP, HTTP requests, Gitea API
This commit is contained in:
commit
d811b20d8f
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
.venv/
|
||||
.env
|
||||
__pycache__/
|
||||
*.pyc
|
||||
.vs/
|
||||
.vscode/
|
||||
32
README.md
Normal file
32
README.md
Normal 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
44
gitea_api.py
Normal 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
4
http_requests.py
Normal file
@ -0,0 +1,4 @@
|
||||
import requests
|
||||
|
||||
response = requests.get("http://vyatsu.ru")
|
||||
print(response.text[:500])
|
||||
9
http_socket.py
Normal file
9
http_socket.py
Normal 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
8
tcp_client.py
Normal 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
17
tcp_server.py
Normal 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
7
udp_client.py
Normal 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
10
udp_server.py
Normal 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)
|
||||
Loading…
Reference in New Issue
Block a user