20.1 介绍
20.1.1 Web应用:客户端/服务器计算
Web客户端和服务器端交互使用的“语言”,Web交互的标准协议是HTTP(超文本传输协议)。HTTP协议是TCP/IP协议的上层协议,这意味着HTTP协议依靠TCP/IP协议来进行底层的交流工作。它的职责不是路由或者传递消息(TCP/IP协议处理这些),而是通过发送、接收HTTP消息来处理客户端的请求。
HTTP协议属于无状态协议,它不跟踪从一个客户端到另一个客户端的请求信息。每个请求缺乏上下文背景。
20.1.2 因特网
因特网是由多种工作在一定顺序下(也许非连贯的)相互连接的网络组成的。
20.2 使用Python进行Web应用:创建一个简单的Web客户端
URL(统一资源定位器,Uniform Resource Locator)的Web地址。这个地址用来在Web上定位一个文档,或者调用一个CGI程序来为你的客户端产生一个文档。URL是大型标识符URI(统一资源标识, Uniform Resource Identifier)的一部分。
URL格式: prot_sch://net_loc/path;params?query#frag
20.2.2 urlparse模块
urlparse模块提供了操作URL字符串的基本功能。
>>> import urlparse
>>> urlparse.urlparse("http://www.renren.com/home?id=229741205")
ParseResult(scheme='http', netloc='www.renren.com', path='/home', params='', query='id=229741205', fragment='')
>>>
urlparse()将urlstr解析成一个6元组。
urlunparse()拼合一个6元组为一个urlstr
urljoin()取得baseurl,并将其基路径与newurl连接起来
>>> urlparse.urljoin("http://user.qzone.qq.com", "/414719286/infocenter")
'http://user.qzone.qq.com/414719286/infocenter'
>>>
20.2.3 urllib模块
Urllib模块提供了在给定的URL地址下载数据的功能,同时也可以通过字符串的编码、解码来确保它们是有效URL字符串的一部分。
1. urllib.urlopen()
>>> import urllib
>>> file = urllib.urlopen("http://www.renren.com/home")
>>> for linedata in file.readlines():
... print linedata
...
urlopen()打开urlstr所指向的URL,以文件流的形式读取URL地址的内容。
GET和POST请求是向Web服务器上传数据的两种方法。
2. urllib.urlretrieve()
urlretrieve()可以方便地将urlstr定位到的整个HTML文件下载到你本地的硬盘上。你可以将下载后的数据存成一个本地文件或者一个临时文件。如果该文件已经被复制到本地或者已经是一个本地文件,后续的下载动作将不会发生。
>>> urllib.urlretrieve("http://www.renren.com/home", "C:\\Documents and Settings\\10170660\\Desktop\\123.txt")
('C:\\Documents and Settings\\10170660\\Desktop\\123.txt', <httplib.HTTPMessage instance at 0x015DBA08>)
>>>
downloadStatusHook这个函数将会在每块数据下载或传输完成后被调用。调用时下边三个参数:目前读入的块数、块的字节数和文件的总字节数。
3. Urllib.quote()和urllib.quote-plus()
quote*()函数获取URL数据,并将其编码,从而适用于URL字符串中。尤其一些不能被打印的或者不被web服务器作为有效URL接收的特殊字符串必须被转换。
>>> mail = "xufei96@hotmail.com"
>>> url = urllib.quote("http://www.renren.com/home? mail = %s"%mail)
>>> url
'http%3A//www.renren.com/home%3F%20mail%20%3D%20xufei96%40hotmail.com'
>>>
4. urllib.unquote()和urllib.unquote_plus()
unquote()函数将会把urldata中所有的URL-编码字母都解码,并返回字符串。
>>> mail = "xufei96@hotmail.com"
>>> url = urllib.quote("http://www.renren.com/home? mail = %s"%mail)
>>> url
'http%3A//www.renren.com/home%3F%20mail%20%3D%20xufei96%40hotmail.com'
>>> urllib.unquote(url)
'http://www.renren.com/home? mail = xufei96@hotmail.com'
>>>
5. urllib.urlencode()
接收字典的键值对,并将其编译成CGI请求的URL字符串。
>>> aDict = {'name':'Anders', 'mail':'xufei96@hotmail.com'}
>>> urllib.urlencode(aDict)
'mail=xufei96%40hotmail.com&name=Anders'
>>>