python的HTTP请求方式(socket)

关于 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))

  • 各模块的区别
  1. Python的urllib集合了python2的urllib和urllib2两个模块,解决了urllib不可伪装user Agent和urllib2无urlencode两个主要问题,功能齐全
  2. Urllib3是在urllib基础上集成第三方库,提供了:线程安全,连接池等新的特性
  3. Requests:是使用最广泛的,使用最简单,功能全面
  4. Httplib2实现了HTTP和HTTPS的客户端协议,一般不直接使用,在 python 更高层的封装模块中(urllib,urllib2)使用了它的http实现
  • 相关参考文章:

猜你喜欢

转载自blog.csdn.net/zzzzzztt/article/details/80861135