Język PYTHON ‑ narzędzie dla każdego naukowca
Transkrypt
Język PYTHON ‑ narzędzie dla każdego naukowca
JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA Marcin Lewandowski [ [email protected] ] PROGRAMOWANIE SIECIOWE 2 TCP/IP = UDP + TCP • TCP/IP składa się z dwóch podstawowych protokołów: TCP i UDP. • Większość protokołów wyższego poziomu opiera się na TCP • Oba protokoły są obsługiwane za pomocą interfejsu programistycznego zwanego socket. Socket to logiczny obiekt plikowy, który zapewnia komunikację (pozwala na przyjmowanie połączeń przychodzących, nawiązywanie połączeń wychodzących, i przekazywanie danych). Komputer przyjmujący połączenie przez socket (tzw. serwer) musi związać socket do określonego portu. • • – TCP jest protokołem połączeniowym z zapewnieniem poprawności przesyłanych danych – UDP jest protokołem niższego poziomu bezpołączeniowym, który nie gwarantuje dotarcia danych do adresata – Port jest 16-bit numerem (0–65535), który jest używany przez system operacyjny do zarządzania połączeniami klient-serwer. – Porty 0–1023 są zarezerwowane do obsługi „znanych” protokołów sieciowych (np. 80-HTTP, 23-Telnet) – pełna lista: http://www.iana.org/assignments/port-numbers 3 TCI i UDP przez socket TCP UCP Na podstawie: David M. Beazley, Python Essential Reference, Pearson Education, 2009 4 Literatura uzupełniającą • W. Richard Stevens: – Unix Network Programming, Volume 1: The Sockets Networking API, Prentice Hall, 2003. – UNIX Network Programming, Volume 2: Interprocess Communications, Prentice Hall, 1998. – TCP/IP Illustrated, Vol. 1: The Protocols, AddisonWesley, 1994 – TCP/IP Illustrated, Vol. 2: The Implementation, Addison-Wesley, 1995 – TCP/IP Illustrated, Vol. 3: TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols, AddisonWesley, 1996 5 Python moduły „sieciowe” Nazwa modułu Opis socket, ssl Niskopoziomowa obsługa komunikacji TCP/IP – socket i SSL dla socket socketserver Framework dla budowy usług serwerów http.server Serwer HTTP Email Obsługa Email i MIME urllib.request, urllib.parse, urllib.error Klient WWW ftplib, poplib, imaplib, nntplib, smtplib, Moduły „klientów” dla różnych protokołów telnetlib xmlrpc.client, xmlrpc.server XML-RPC klient i serwer cgi, cgitb Common Gateway Interface – interfejs do wywoływania skryptów przez serwer HTTP asyncore, asynchat Asynchroniczna obsługa komunikacji sieciowej 6 TCP – serwer czasu from socket import * import time s = socket(AF_INET, SOCK_STREAM) # Create a TCP socket s.bind(('',8888)) # Bind to port 8888 s.listen(5) # Listen, upto than 5 pending connections while True: client,addr = s.accept() # Get a connection print("Got a connection from %s" % str(addr)) timestr = time.ctime(time.time()) + "\r\n" client.send(timestr.encode('ascii')) client.close() 7 TCP – client do serwera czasu # Time client program from socket import * s = socket(AF_INET,SOCK_STREAM) # Create a TCP socket s.connect(('localhost', 8888)) # Connect to the server tm = s.recv(1024) # Receive upto 1024 bytes s.close() print("The time is %s" % tm.decode('ascii')) 8 Moduł ftplib >>> from ftplib import FTP >>> ftp = FTP('ftp.cwi.nl') # connect to host, default port >>> ftp.login() # user anonymous, passwd anonymous@ >>> ftp.retrlines('LIST') # list directory contents total 24418 drwxrwsr-x 5 ftp-usr pdmaint 1536 Mar 20 09:48 . dr-xr-srwt 105 ftp-usr pdmaint 1536 Mar 21 14:32 .. -rw-r--r-- 1 ftp-usr pdmaint 5305 Mar 20 09:48 INDEX . . . >>> ftp.retrbinary('RETR README', open('README', 'wb').write) '226 Transfer complete.' >>> ftp.quit() 9 Moduł ftplib • FTP.set_debuglevel(level) – ustawia poziom debuggowania () dla danej instancji. – 0 (domyślnie) – nie produkuje żadnej informacji debuggowej – 1 – produkuje podstawową informację o połączeniu (~jedną linię dla każdego żądania) – 2 i więcej – produkuje duużo informacji 10 Moduły http • Moduł http zapewnia obsługę protokołu HTTP (dla klientów i serwerów), w tym zarządzanie stanem (cookies) • Podstawowe metody HTTP: – – – – GET – pobierz dokument POST – prześlij dane z formularza HEAD – pobierz nagłówek PUT – załaduj dane na serwer • Uwaga na zmiany: – Python 2: httplib -> Python 3: http.client – Python 2: BaseHTTPServer -> Python 3: http.server 11 Moduł urllib • Wysokopoziomowy moduł do realizacji interakcji z serwerami HTTP, FTP, plikami lokalnymi • Typowe zastosowania: – scraping – automatyzacja pobierania danych z sieci – Web crawlers – przeszukiwacze sieci – Proxies – –… 12 urllib import urllib URL = 'http://www.ippt.gov.pl/index.htm' fhand = urllib.urlopen(URL) for line in fhand: print line.strip() 13 Yahoo! Weather RSS Feed • Dane o prognozie pogody dla Warszawy z: Yahoo! Weather RSS Feed • Dane na stronie: http://weather.yahoo.com/poland/masovian/ warsaw-523920 • Dokumentacja RSSa: http://developer.yahoo.com/weather 14