前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python的HTTP请求方式(sock

python的HTTP请求方式(sock

作者头像
py3study
发布2020-01-14 16:12:29
1.3K0
发布2020-01-14 16:12:29
举报
文章被收录于专栏:python3python3

关于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访问https
  • 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实现
  • 相关参考文章:

https://www.cnblogs.com/gaoyuechen/p/8245489.html

https://www.cnblogs.com/Lands-ljk/p/5447127.html

https://www.cnblogs.com/itech/archive/2011/01/10/1931946.html

https://blog.csdn.net/xsj_blog/article/details/52102652

https://www.cnblogs.com/KGoing/p/6146999.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档