关于
python
的
HTTP
请求方式
-
HTTP 请求步骤为 :
1.
域名解析
2.
发起
TCP
的
3
次握手
3.
建立
TCP
连接后发起
http
请求
4.
服务器端响应
http
请求,浏览器得到
html
代码
5.
浏览器解析
html
代码,并请求
html
代码中的资源
6.
浏览器对页面进行渲染呈现给用户
-
简化为 :
DNS
解析(浏)
->TCP
连接(三次握手)
->http Requests
(浏)
->Response
(服)
-> Parse
(浏)
-> Render
(浏)
->TCP
断开(四次挥手)
-
SOCKET 访问 web http
import socket url = 'www.sina.com.cn' port = 80 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((url, port)) request_url = 'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n' sock.send(request_url.encode()) response = b'' rec = sock.recv(1024) while rec: response += rec rec = sock.recv(1024) print(response.decode())
-
SOCKET 访问 http s
import socket import ssl url = 'dps-precheck-h.camcard.com' port = 443 sock = ssl.wrap_socket(socket.socket()) sock.connect((url, port)) request_url = 'GET /api/v1/block/block_info?id=dpsv45_9aeb8b0e953711e7af605254003cf65b HTTP/1.1\r\nHost: dps-precheck-h.camcard.com\r\nConnection: close\r\n\r\n' sock.send(request_url.encode()) response = b'' rec = sock.recv(1024) while rec: response += rec rec = sock.recv(1024) print(response.decode())
-
模块举例
Python
中将这些步骤被封装成了完整的模块,直接调用即可进行。
以
python3
为例,类似模块有:
urllib
,
urllib3
,
httplib
,
requests
等
get
|
post
|
|
requests
|
Data = requests.get(url)
|
Data = requests.post(url,
data =data)
|
urllib
|
f = urllib.request.urlopen
(url)
f.read().decode('utf-8')
|
类似
get
,在
urlopen
加入
post
提交的
data
|
urllib3
|
http=urllib3.PoolManager()
r=http.request(
‘get’,
url,
fields={‘ ’:’ ’},
headers={}
)
|
get
变为
post
|
httplib2
|
h = httplib2.Http()
head, content=h.request(url)
|
在
request
函数中加设置请求方式
post
,以及提交的表单
|
pycurl
|
c = pycurl.Curl()
c.setopt(c.URL, url)
b = StringIO.StringIO()
c.setopt(c.WRITEFUNCTION, b.write)
c.perform()
print b.getvalue()
|
curl.setopt(pycurl.POSTFIELDS, urllib.urlencode(data))
|
-
各模块的区别 :
-
Python的urllib集合了python2的urllib和urllib2两个模块,解决了urllib不可伪装user Agent和urllib2无urlencode两个主要问题,功能齐全
-
Urllib3是在urllib基础上集成第三方库,提供了:线程安全,连接池等新的特性
-
Requests:是使用最广泛的,使用最简单,功能全面
-
相关参考文章: