предадените решения са цифром и словом 0(НУЛА)
Ще ви говорим за третото 'w' от 'www'
Как тъй краткия текст "facebook.com" ви навежда на мисли със син фон, пълни със снимките от нереално красивите и интересни ваканции на приятелите ви.
С какво "facebook.com" е различно от "чорба с праз"? И двете са текст от 13 символа
Client-Server протокол, за раздаване на документи
Измислен е с цел споделяне на научни документи
Това значи предимно текст, леко форматиран и (недай си Боже!) някоя картинка
От това нещо някак се раждат неща като twitter, facebook, amazon
RFC по темата
Според w3tech около 7.5% от сайтовете вече го поддържат към април тази година
Когато искаме да направим връзка с друга машина през мрежата
операционната система знае през кое мрежово устройство да изпрати пакет, който е предназначен за някой IP адрес
най-често това означава, че пакета стига до вашия gateway(примерно рутера ви вкъщи), който знае на къде да го изпрати, за да стигне до крайната си цел
от вашата мапина до целта обикновено се минава през много на брой други машини(hop-ове)
ако връзката е TCP(няма да мислим за други за сега) имаме гаранция, че всички изпратени пакети са доставени, тъй като получаваме потвърждения и при неуспех изпращаме отново
от гледна точка на вашия код всички тези неща изглеждат доста просто
Текстов
Без състяние
Клиента праща "заявка", сървъра отговаря с "отговор"
И двете се сътоят от headers и body
"Мета" данни и данни
Ключ: Стойност
Описани са в стандарта
Каквато и да е купчина от байтове
Просто TCP сървър
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
"""
The request handler class for our server.
It is instantiated once per connection to the server, and must
override the handle() method to implement communication to the
client.
"""
def handle(self):
# self.request is the TCP socket connected to the client
self.data = self.request.recv(1024).strip()
print("{} wrote:".format(self.client_address[0]))
print(self.data)
# just send back the same data, but upper-cased
self.request.sendall(self.data.upper())
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
# Create the server, binding to localhost on port 9999
server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()
Строи върху socketserver с HTTP протокола
from http.server import BaseHTTPRequestHandler, HTTPServer
# HTTPRequestHandler class
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
# GET
def do_GET(self):
# Send response status code
self.send_response(200)
# Send headers
self.send_header('Content-type','text/html')
self.end_headers()
# Send message back to client
message = "Hello world!"
# Write content as utf-8 data
self.wfile.write(bytes(message, "utf8"))
return
def run():
print('starting server...')
# Server settings
# Choose port 8080, for port 80, which is normally used for a http server, you need root access
server_address = ('127.0.0.1', 8081)
httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
print('running server...')
httpd.serve_forever()
run()
Клиетска библиотека за HTTP
Най - често ще е по - добре да използвате urllib.request
Спомняте ли си facebook.com? Какво е това .com в крайна сметка?
Компютрите не разбират от имена на човешки език, комуникират чрез Internet Protocol
Всеки (почти) компютър в паяжината има уникален (почти) IP address, който се използва за комуникация
Трябва да се случи превеждане от facebook.com до IP адрес, например 173.252.120.6
Domain Name System върши това
Това е глобална, централизирана и същевременно разпределена (what!?) и изключително добре обмислена система
Централизира и разпределена?
socket.gethostbyname и socket.gethostbyname_ex
много на брой
пример
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello flask!"
if name == "__main__":
app.run()
после
pip install Flask
python hello.py
import muffin
app = muffin.Application('example')
@app.register('/', '/hello/{name}')
def hello(request):
name = request.match_info.get('name', 'anonymous')
return 'Hello %s!' % name
после pip install muffin python3 hello.py run