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

Podobne dokumenty