python-requests向服务器发送请求(post/get)
python处理http请求有很多库,,比如python的原生库:urllib包、requests类库等
requests库和urllib包对比:
urllib和urllib2是相互独立的模块,python3.0以上把urllib和urllib2合并成一个库了,requests库使用了urllib3。requests库的口号是“HTTP For Humans”,为人类使用HTTP而生,用起来不知道要比python原生库好用多少呢,比起urllib包的繁琐,requests库特别简洁和容易理解。
从以下几个方面进行对比:
1)构建参数:在构建请求参数时,第一种需要将请求参数使用urllib库的urlencode方法进行编码预处理,非常麻烦
2)请求方法:发送get请求时,第一种使用的urllib库的urlopen方法打开一个url地址,而第二种直接使用requests库的get方法,与http请求方式是对应的,更加直接、易懂
3)请求数据:第一种按照url格式去拼接一个url字符串,显然非常麻烦,第二种按顺序将get请求的url和参数写好就可以了
4)处理响应:第一种处理消息头部、响应状态码和响应正文时分别使用.info()、.getcode()、.read()方法,第二种使用.headers、.status_code、.text方法,方法名称与功能本身相对应,更方便理解、学习和使用
5)连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,"connection":"close",说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,"connection":"keep-alive",说明多次请求使用一个连接,消耗更少的资源
6)编码方式:requests库的编码方式Accept-Encoding更全,
ps:requests库的官网是http://www.python-requests.org/en/master/,里面有操作文档
介绍下requests库的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | # HTTP请求类型 # get类型 r = requests.get( 'https://github.com/timeline.json' ) # post类型 r = requests.post( "http://m.ctrip.com/post" ) # put类型 r = requests.put( "http://m.ctrip.com/put" ) # delete类型 r = requests.delete( "http://m.ctrip.com/delete" ) # head类型 r = requests.head( "http://m.ctrip.com/head" ) # options类型 r = requests.options( "http://m.ctrip.com/get" ) # 获取响应内容 print (r.content) #以字节的方式去显示,中文显示为字符 print (r.text) #以文本的方式去显示 #URL传递参数 payload = { 'keyword' : '香港' , 'salecityid' : '2' } r = requests.get( "http://m.ctrip.com/webapp/tourvisa/visa_list" , params = payload) print (r.url) #示例为http://m.ctrip.com/webapp/tourvisa/visa_list?salecityid=2&keyword=香港 #获取/修改网页编码 r = requests.get( 'https://github.com/timeline.json' ) print (r.encoding) #json处理 r = requests.get( 'https://github.com/timeline.json' ) print (r.json()) # 需要先import json # 定制请求头 url = 'http://m.ctrip.com' headers = { 'User-Agent' : 'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' } r = requests.post(url, headers = headers) print (r.request.headers) #复杂post请求 url = 'http://m.ctrip.com' payload = { 'some' : 'data' } r = requests.post(url, data = json.dumps(payload)) #如果传递的payload是string而不是dict,需要先调用dumps方法格式化一下 # post多部分编码文件 url = 'http://m.ctrip.com' files = { 'file' : open ( 'report.xls' , 'rb' )} r = requests.post(url, files = files) # 响应状态码 r = requests.get( 'http://m.ctrip.com' ) print (r.status_code) # 响应头 r = requests.get( 'http://m.ctrip.com' ) print (r.headers) print (r.headers[ 'Content-Type' ]) print (r.headers.get( 'content-type' )) #访问响应头部分内容的两种方式 # Cookies url = 'http://example.com/some/cookie/setting/url' r = requests.get(url) r.cookies[ 'example_cookie_name' ] #读取cookies url = 'http://m.ctrip.com/cookies' cookies = dict (cookies_are = 'working' ) r = requests.get(url, cookies = cookies) #发送cookies #设置超时时间 r = requests.get( 'http://m.ctrip.com' , timeout = 0.001 ) #设置访问代理 proxies = { "http" : "http://10.10.1.10:3128" , "https" : "http://10.10.1.100:4444" , } r = requests.get( 'http://m.ctrip.com' , proxies = proxies) #如果代理需要用户名和密码,则需要这样: proxies = { "http" : "http://user:pass@10.10.1.10:3128/" , } |
json中json.loads()和json.dumps()的区别
json.loads() 是将字符串传化为字典
json.dumps () 是将字典转化为字符串
举列
一、python向服务器发送一个带参数的get请求
import requests import json def fun_httpget(): date1={'wd': 'python'} r = requests.get(url='https://dict.baidu.com/s',params=date1) r.text print(r.text) fun_httpget()
响应结果为html格式内容,打开即为我们百度搜索python结果
二、python向服务器发送一个post请求。
请求报文格式为json格式,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #coding=utf-8 from urllib import request, parse import urllib import requests import json import excelTestConfigure import Log def fun_httprequest(dict_qurey_data): logname = 'request_post' url = 'http://ip:port/path' print (url) s = json.dumps(dict_qurey_data) print (s) headers = { 'Content-Type' : 'servicejson;charset=UTF-8' } r = requests.post(url = url, data = dict_qurey_data,headers = headers) respode = r.text print ( '响应报文为' ) print (respode) ret_dict = json.loads(respode) #��str����ת��Ϊdict���� return ret_dict dict_qurey_data = "{'client_name': 'TRUE,0', 'card_no': '6216610100008898222', 'partner_trans_time': '192552', 'partner_trans_date': '201705101', 'partner_serial_no': 'AutoTestJin20201201192552934659', 'cvv2': '987', 'mobile_tel': '15988179711', 'pay_bankacct_type': '0', 'id_kind': '0', 'partner_id': 'A0003123', 'valid_date': '0817', 'id_no': '320113196912021509', 'func_code': '1'}" fun_httprequest(dict_qurey_data) |
可以得到服务器结果的请求和响应
参考:https://www.cnblogs.com/lanyinhao/p/9634742.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本