• Nie Znaleziono Wyników

Usługi sieciowe

N/A
N/A
Protected

Academic year: 2021

Share "Usługi sieciowe"

Copied!
39
0
0

Pełen tekst

(1)

Usługi sieciowe

Marcin Młotkowski

(2)

Aplikacje sieciowe Korzystanie z usług sieciowych

Plan wykładu

1 Aplikacje sieciowe

Aplikacje webowe (wersja standardowa) Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

2 Korzystanie z usług sieciowych

(3)

Internet

Transport layer

Application layer

TCP, UDP

HTTP, POP3, SMTP, FTP

(4)

Aplikacje sieciowe Korzystanie z usług sieciowych

Batteries Included

Standardowe biblioteki

ftplib, poplib, mmtplib, nntplib, email, mimetools, mimetypes, base64

Wymiana plików TinyP2P

(5)

Batteries Included

Standardowe biblioteki

ftplib, poplib, mmtplib, nntplib, email, mimetools, mimetypes, base64

Wymiana plików TinyP2P

(6)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa) Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

Plan wykładu

1 Aplikacje sieciowe

Aplikacje webowe (wersja standardowa) Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

2 Korzystanie z usług sieciowych

(7)

Proste zadanie

Zdalne monitorowanie pracy wielu komputerów za pomocą przeglądarki:

Na każdym komputerze jest uruchomiony serwer http;

żądanie jakiejś strony powoduje wykonanie odpowiedniej akcji, np.:

http://host/uptime

powoduje wykonanie polecenia uptime i zwrócenie outputu polecenia do przeglądarki;

(8)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa)

Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

Szczegóły protokołu http, żądanie

Klient

GET / HTTP/1.1 Host: www.ii.uni.wroc.pl User-Agent: Mozilla/5.0

(9)

Szczegóły protokołu http, odpowiedź

Serwer

HTTP/1.1 200 OK

Date: Mon, 21 Dec 2009 09:14:01 GMT Server: Apache/2.0.54 (Debian GNU/Linux) Content-Length: 37402

(10)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa)

Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

Obsługa HTTP

Serwer webowy: obiekt klasy http.server.HTTPServer Obsługuje protokół http;

nie obsługuje żądań.

Obsługa żądań: klasa http.server.impleHTTPRequestHandler klasa bazowa do rozbudowy własnej funkcjonalności;

metody obsługujące żądania (GET, POST, HEADER,...); metody konstrukcji odpowiedzi.

(11)

Obsługa HTTP

Serwer webowy: obiekt klasy http.server.HTTPServer Obsługuje protokół http;

nie obsługuje żądań.

Obsługa żądań: klasa http.server.impleHTTPRequestHandler klasa bazowa do rozbudowy własnej funkcjonalności;

metody obsługujące żądania (GET, POST, HEADER,...); metody konstrukcji odpowiedzi.

(12)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa)

Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

Serwer

Implementacja

fromhttp.serverimportHTTPServer, SimpleHTTPRequestHandler

importos

classMyHttpHandler(SimpleHTTPRequestHandler):

(13)

Implementacja klasy MyHttpHandler

Obsługa żądania GET

defdo GET(self):

self.send response(200)

self.send header(’Content-type’,’text/html’)

self.end headers()

self.wfile.write(b’<html><head><head>’)

self.wfile.write(b’<body>’)

ifself.path ==’/uptime’:

self.uptime()

else:

self.menu()

(14)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa)

Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

Implementacja serwera

Implementacja uptime

defuptime(self):

res = bytes(os.popen(’uptime’).read(), ’utf-8’)

self.wfile.write(b’<h1>Rezultat</h1>’)

self.wfile.write(b’<tt>’ + res + b’</tt>’)

(15)

Implementacja serwera

Menu

defmenu(self):

self.wfile.write(b’<h1>Serwer</h1>’)

self.wfile.write(b’<ul>’)

self.wfile.write(b’<li><a href=”uptime”>uptime</a></li>’)

(16)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa)

Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

Serwer http

Uruchomienie całego serwera address = (”, 8000)

httpd = HTTPServer(address, MyHttpHandler) httpd.serve forever()

(17)

Co to jest

Framework do obsługi różnych protokołów sieciowych. Oparty jest na paradygmacie sterowania zdarzeniami.

(18)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa)

Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

Obsługa żądań

fromtwisted.internetimportreactor

fromtwisted.web importhttp

classMyRequestHandler(http.Request):

defprocess(self):

self.setHeader(’Content-type’,’text/html’)

self.write(b’<html><head><head>’)

self.write(b’<body>’)

ifself.path == b’/uptime’: self.uptime()

else: self.menu()

self.write(b’</body></html>’)

self.finish()

defuptime(self): ...

defmenu(self): ...

(19)

classMyHTTP(http.HTTPChannel): requestFactory = MyRequestHandler

classHTTPServerFactory(http.HTTPFactory):

defbuildProtocol(self, addr):

returnMyHTTP()

reactor.listenTCP(8001, HTTPServerFactory()) reactor.run()

(20)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa) Serwer w twisted

Prosty serwer aplikacyjny XML RPC

Sieć TinyP2P

Serwery aplikacyjne

foo(args)

wynik

(21)

Wykorzystywane protokoły

General InterORB Protocol Remote Java Invocation RPC

.NET Remoting XML RPC ...

(22)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa) Serwer w twisted

Prosty serwer aplikacyjny XML RPC

Sieć TinyP2P

Zadanie

Serwer obliczający zdalnie n-tą liczbę Fibonacciego

(23)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa) Serwer w twisted

Prosty serwer aplikacyjny XML RPC

Sieć TinyP2P

Serwer

fromxmlrpc.server importSimpleXMLRPCServer

Implementacja funkcjonalności

deffib(n):

if n < 2: return1

returnfib(n - 1) + fib(n - 2)

fromSimpleXMLRPCServerimport*

server = SimpleXMLRPCServer((”localhost”, 8002))

server.register function(fib)

server.register function(lambdax, y: x + y,”add”) server.serve forever()

(24)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa) Serwer w twisted

Prosty serwer aplikacyjny XML RPC

Sieć TinyP2P

Serwer

fromxmlrpc.server importSimpleXMLRPCServer

Implementacja funkcjonalności

deffib(n):

if n < 2: return1

returnfib(n - 1) + fib(n - 2) Implementacja serwera

fromSimpleXMLRPCServerimport*

server = SimpleXMLRPCServer((”localhost”, 8002))

server.register function(fib)

server.register function(lambdax, y: x + y,”add”) server.serve forever()

(25)

Klient

Implementacja

importxmlrpc.client

server = xmlrpc.client.ServerProxy(’http://localhost:8002’)

print(server.fib(10))

(26)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Aplikacje webowe (wersja standardowa) Serwer w twisted

Prosty serwer aplikacyjny XML RPC

Sieć TinyP2P

By E.W. Felten

importsys, os, SimpleXMLRPCServer, xmlrpclib, re, hmac

ar,pw,res = (sys.argv,lambdau:hmac.new(sys.argv[1],u).hexdigest(),re.search) pxy,xs = (xmlrpclib.ServerProxy,SimpleXMLRPCServer.SimpleXMLRPCServer)

defls(p=””):returnfilter(lambdan:(p==””)or res(p,n),os.listdir(os.getcwd()))

ifar[2]!=”client”:

myU,prs,srv = (”http://”+ar[3]+”:”+ar[4], ar[5:],lambdax:x.serve forever())

defpr(x=[]):return([(y in prs) or prs.append(y)foryinx] or 1) and prs

defc(n):return((lambdaf: (f.read(), f.close()))(file(n)))[0]

f=lambdap,n,a:(p==pw(myU))and(((n==0)and pr(a))or((n==1)and [ls(a)])or c(a))

defaug(u):return((u==myU) and pr()) or pr(pxy(u).f(pw(u),0,pr([myU]))) pr() and [aug(s)forsinaug(pr()[0])]

(lambdasv:sv.register function(f,”f”) or srv(sv))(xs((ar[3],int(ar[4]))))

forurlinpxy(ar[3]).f(pw(ar[3]),0,[]):

forfninfilter(lambdan:not n in ls(), (pxy(url).f(pw(url),1,ar[4]))[0]): (lambdafi:fi.write(pxy(url).f(pw(url),2,fn)) or fi.close())(file(fn,”wc”))

(27)

Plan wykładu

1 Aplikacje sieciowe

Aplikacje webowe (wersja standardowa) Serwer w twisted

Prosty serwer aplikacyjny XML RPC Sieć TinyP2P

(28)

Aplikacje sieciowe

Korzystanie z usług sieciowych

SOAP

SOAP XML RPC JSON RPC REST ...

(29)

Publiczne serwisy

Google Amazon Allegro GUS Geodezja NASA ...

(30)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Podstatwowe narzędzie

importrequests

Z dokumentacji

Requests: HTTP dla ludzi

(31)

Podstatwowe narzędzie

importrequests Z dokumentacji

(32)

Aplikacje sieciowe

Korzystanie z usług sieciowych

International Space Station

Źródło: Wikipedia

(33)

Gdzie jest ISS, kto tam jest

importrequests

res = requests.get(”http://api.open-notify.org/astros.json”) print(res.json())

res = requests.get(”http://api.open-notify.org/iss-now.json”) print(res.json())

(34)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Jaka będzie pogoda

http://api.openweathermap.org uzyskanie własnego API key

(35)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Postać żądania

”http://api.openweathermap.org/data/2.5/forecast

?q=Wroclaw&units=metrics&mode=json&APPID=...”

’APPID’: private.KEY} res = requests.get(url, params=params)

withopen(’prognoza.json’,’w’) as fh: fh.write(json.dumps(res.json()))

(36)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Postać żądania

”http://api.openweathermap.org/data/2.5/forecast

?q=Wroclaw&units=metrics&mode=json&APPID=...”

url =”http://api.openweathermap.org/data/2.5/forecast”

params = {’q’: ”Wroclaw”,’mode’: ’json’,’units’: ’metric’,

’APPID’: private.KEY} res = requests.get(url, params=params)

withopen(’prognoza.json’,’w’) as fh: fh.write(json.dumps(res.json()))

(37)

Logowanie i sesja

(38)

Aplikacje sieciowe

Korzystanie z usług sieciowych

Sesja

Za obsługę sesji (ciasteczek etc) odpowiada obiekt requests.Session().

(39)

Kod

importrequests

importprivate

url =’https://zapisy.ii.uni.wroc.pl/’

cred = {’username’: ’usrname’,’password’: ’kdfjaskd’}

withrequests.Session()as s: s.get(url)

s.post(url +’users/login’, data=cred)

odp = s.get(url +’news/’)

Cytaty

Powiązane dokumenty

 wywoływany adres URL (http://www.wp.pl) jest obsługiwany przez serwer, którego podstawowy adres jest zupełnie inny.  Jeden serwer fizyczny obsługuje zwykle wiele

Osoba akceptująca ocenę odpowiadać będzie wyłącznie z tematyki referatu, zaś osoba starająca się podwyższyć ocenę - z tematyki referatu oraz materiału omawianego na

верситет імені Івана Пулюя має академічні ліцензії на використання закритого комерційного програмного забезпечення, зокрема компаній Microsoft

Produkcja bardzo precyzyjnych części wysokiej jakości z wykorzystaniem jednoczesnej obróbki wieloosiowej Firma Heiwa Sangyo Co., Ltd.. (Heiwa Sangyo) wytwarza produkty wymagające

Jeśli chodzi o cyfrowe produkty o losowej zawartości, to co do zasady oferowane są one w środowi- skach, które uniemożliwiają lub co najmniej „regulują” możliwość

O ile bowiem nie nastręcza wątpliwości określenie, kim jest małżonek, wstępny, zstępny, powinowaty w tej samej linii lub stopniu, osoba pozostająca w stosunku przy- sposobienia

Podmiotami uprawnionymi do złożenia wniosku o stwierdzenie przez sąd opiekuńczy ustania obo- wiązku leczenia odwykowego, gdy cel terapii został osiągnięty przed upływem dwóch

– Obiekt do obsługi mechanizmu sesji związanej z żądaniem (typ obiektu HttpSession) Mechanizm sesji może być wyłączony przez dyrektywę