33This version adds a Request object.
44"""
55
6+ import asyncio
7+ from http .client import BadStatusLine
68import sys
79import urllib .parse
8- from http .client import BadStatusLine
9-
10- from asyncio import *
1110
1211
1312class Request :
@@ -34,13 +33,13 @@ def __init__(self, url, verbose=True):
3433 self .reader = None
3534 self .writer = None
3635
37- @coroutine
36+ @asyncio . coroutine
3837 def connect (self ):
3938 if self .verbose :
4039 print ('* Connecting to %s:%s using %s' %
4140 (self .hostname , self .port , 'ssl' if self .ssl else 'tcp' ),
4241 file = sys .stderr )
43- self .reader , self .writer = yield from open_connection (self .hostname ,
42+ self .reader , self .writer = yield from asyncio . open_connection (self .hostname ,
4443 self .port ,
4544 ssl = self .ssl )
4645 if self .verbose :
@@ -51,20 +50,22 @@ def connect(self):
5150 def putline (self , line ):
5251 self .writer .write (line .encode ('latin-1' ) + b'\r \n ' )
5352
54- @coroutine
53+ @asyncio . coroutine
5554 def send_request (self ):
5655 request = '%s %s %s' % (self .method , self .full_path , self .http_version )
57- if self .verbose : print ('>' , request , file = sys .stderr )
56+ if self .verbose :
57+ print ('>' , request , file = sys .stderr )
5858 self .putline (request )
5959 if 'host' not in {key .lower () for key , _ in self .headers }:
6060 self .headers .insert (0 , ('Host' , self .netloc ))
6161 for key , value in self .headers :
6262 line = '%s: %s' % (key , value )
63- if self .verbose : print ('>' , line , file = sys .stderr )
63+ if self .verbose :
64+ print ('>' , line , file = sys .stderr )
6465 self .putline (line )
6566 self .putline ('' )
6667
67- @coroutine
68+ @asyncio . coroutine
6869 def get_response (self ):
6970 response = Response (self .reader , self .verbose )
7071 yield from response .read_headers ()
@@ -81,14 +82,15 @@ def __init__(self, reader, verbose=True):
8182 self .reason = None # 'Ok'
8283 self .headers = [] # [('Content-Type', 'text/html')]
8384
84- @coroutine
85+ @asyncio . coroutine
8586 def getline (self ):
8687 return (yield from self .reader .readline ()).decode ('latin-1' ).rstrip ()
8788
88- @coroutine
89+ @asyncio . coroutine
8990 def read_headers (self ):
9091 status_line = yield from self .getline ()
91- if self .verbose : print ('<' , status_line , file = sys .stderr )
92+ if self .verbose :
93+ print ('<' , status_line , file = sys .stderr )
9294 status_parts = status_line .split (None , 2 )
9395 if len (status_parts ) != 3 :
9496 raise BadStatusLine (status_line )
@@ -98,13 +100,15 @@ def read_headers(self):
98100 header_line = yield from self .getline ()
99101 if not header_line :
100102 break
101- if self .verbose : print ('<' , header_line , file = sys .stderr )
103+ if self .verbose :
104+ print ('<' , header_line , file = sys .stderr )
102105 # TODO: Continuation lines.
103106 key , value = header_line .split (':' , 1 )
104107 self .headers .append ((key , value .strip ()))
105- if self .verbose : print (file = sys .stderr )
108+ if self .verbose :
109+ print (file = sys .stderr )
106110
107- @coroutine
111+ @asyncio . coroutine
108112 def read (self ):
109113 nbytes = None
110114 for key , value in self .headers :
@@ -118,7 +122,7 @@ def read(self):
118122 return body
119123
120124
121- @coroutine
125+ @asyncio . coroutine
122126def fetch (url , verbose = True ):
123127 request = Request (url , verbose )
124128 yield from request .connect ()
@@ -129,7 +133,7 @@ def fetch(url, verbose=True):
129133
130134
131135def main ():
132- loop = get_event_loop ()
136+ loop = asyncio . get_event_loop ()
133137 try :
134138 body = loop .run_until_complete (fetch (sys .argv [1 ], '-v' in sys .argv ))
135139 finally :
0 commit comments