余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

Python request使用方法及问题总结(灭火器使用方法培训总结)

xiyangw 2022-11-24 16:41 64 浏览 0 评论

第一种方式:res = requests.get(url, params=data, headers = headers)

第二种方式:res = requests.get(url, data=data, headers = headers)

注意:

1.url格式入参只支持第一种方式访问(params=data),json格式入参,只支持第二种方式(data=data)访问,
form-data格式入参可以使用第一种与第二种方式访问。

2.不管是哪种格式的入参,data入参格式都是{“key”:“vaue”,“key1”:“vaue1"},注意参数最好用 " 而不是 ' 。

3.如果是url与form-data入参,data参数必须为字典类型,如果json入参,data必须为字符类型,字典转字符方法如下:data =json.dumps(data,ensure_ascii=False);

4.参数headers必须为字典类型,字符转字典方法如下:json.loads(headers),判断是否是字典方法如:isinstance(data,dict)
模拟post方式访问:
第一种方式:res = requests.post(url, params=data, headers = headers)
第二种方式:res = requests.post(url, data=data, headers = headers)

注意:

1.url格式入参只支持第一种方式访问(params=data),json格式入参,只支持第二种方式(data=data)访问,
form-data格式入参可以使用第一种与第二种方式访问。

2.不管是哪种格式的入参,data入参格式都是{“key”:“vaue”,“key1”:“vaue1"},注意参数最好用 " 而不是 ' 。

3.如果是url与form-data入参,data参数必须为字典类型,如果json入参,data必须为字符类型,字典转字符方法如下:data =json.dumps(data,ensure_ascii=False);

4.参数headers必须为字典类型,字符转字典方法如下:json.loads(headers),判断是否是字典方法如:isinstance(data,dict)
常用响应方法

  • res.text:查看响应内容,返回的是Unicode格式的数据
  • res.content:查看响应内容,返回的字节流数据(主要用于存储图片)
  • res.url:查看完整访问url地址
  • res.encoding:查看响应头部字符编码
  • res.status_code:查看响应码

session与cookies

cookies操作步骤:
1.访问:res = requests.get(url)
2.返回cookie对象:cookiejar = res.cookies
3.转为字典:cookiedict = requests.utils.dict_from_cookiejar(cookiejar)

session操作步骤:

1. 创建session对象:ssion = requests.session()
2. 设置 headers:headers = {"key": "vaule"}
3. 设置登录入参:{"loginName":"sss", "userPass":"sss"}
4. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存至sesion:ssion.post(url, data = data,headers=headers)
5. 直接访问需要登录的页面:ssion.get("https://www.sss.cn/preview/c_clg_web?d=233444")
ssl不验证
#https协议默认verify = True需要证书验证,verify = False表示不验证证书
res = requests.get(url,verify = False)

源码举例

import requests
import json
from _ast import Try
from django.template.context_processors import request
 
class send():
  #1.get方式,无参数访问接口
  def send_get(self,url,data,headers = None):
    res = requests.get(url,params=data,headers = headers)
    return res
  #2.post方式,url格式入参访问接口
  def send_post_url(self,url,data,headers = None):
    res = requests.post(url, params=data, headers = headers)
    return res
  #3.post方式,form-data格式入参访问接口
  def send_post_fdata(self,url,data,headers = None):
    res = requests.post(url, params=data, headers = headers)
    return res
  #4.post方式,josn格式入参访问接口
  def send_post_json(self,url,data,headers = {'content-type': 'application/json'}):
    json_data =json.dumps(data,ensure_ascii=False)
    #特别注意,当文件头是json时 ,发送post请求参数data=值,值必须是json(字符型)
    res = requests.post(url, data=json_data, headers = headers)
    return res
  def cookies(self,url):
    res = requests.get(url)
    #保存CookieJar对象:
    cookiejar = res.cookies
    #将Cookie转为字典:
    cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
    return cookiedict
  def session(self):
    # 1. 创建session对象
    ssion = requests.session()
    # 2. 设置headers
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko",
          "Accept":"image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*",
          "Accept-Language":"zh-Hans-CN,zh-Hans;q=0.5"}
    # 3. 设置登录入参
    data = {"loginName":"sss", "userPass":"sss"} 
    # 4. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存至sesion
    ssion.post("https://passport.sss.cn/login/login", data = data,headers=headers)
    # 5. 直接访问需要登录的页面
    res = ssion.get("https://www.sss.cn/preview/c_clg_web?d=233444")
    return res
  def ssl(self):
    #https协议默认verify = True需要证书验证,verify = False表示不验证证书
    res = requests.get("https://www.12306.cn/index/",verify = False)
    return res
if __name__ == '__main__':
  #1.get方式,无参数访问接口
  res1 = send().send_get('http://127.0.0.1:8888/index',{})
  print('1.get方式,无参数访问接口,返回值:')
  #响应内容json格式转字典
  print(res1.json())
  print('-------开始打印request常见响应方法内容---------------')
  print('查看响应内容,res.text 返回的是Unicode格式的数据')
  print(res1.text)
  print('查看响应内容,res.content返回的字节流数据(主要用于存储图片)')
  print(res1.content)
  print('查看完整url地址,res.url')
  print(res1.url)
  print('查看响应头部字符编码,res.encoding')
  print(res1.encoding)
  print('查看响应码,res.status_code')
  print(res1.status_code)
  print('-------结束打印request常见响应方法内容---------------')
  #2.post方式,url格式入参访问接口
  res2 = send().send_post_url('http://127.0.0.1:8888/article',{'id':'12589','token':'ASDE23EEE9'})
  print('2.post方式,url格式入参访问接口,返回值:')
  print(res2.json())
  #3.post方式,form-data格式入参访问接口
  res3 = send().send_post_fdata('http://127.0.0.1:8888/login',{'usrname':'test','pwd':'123456'})
  print('3.post方式,form-data格式入参访问接口,返回值:')
  print(res3.json())
  #4.post方式,josn格式入参访问接口
  res4 = send().send_post_json('http://127.0.0.1:8888/loginjosn',{"usrname": "test","pwd": "123456"})
  print('4.post方式,josn格式入参访问接口,返回值:')
  print(res4.json())
  res5 = send().cookies('http://www.baidu.com')
  print('5.访问百度打印colies,返回值:')
  print(res5)
  res6 = send().session()
  print('6.需要登录才可以看到资源,通过session可直接查看,返响应状态码:')
  print(res6.status_code)
  res7 = send().ssl()
  print('7.访问12306,设置不验证ssl,verify = False,返响应状态码:')
  print(res7.status_code)

运行结果

1.get方式,无参数访问接口,返回值:
{'msg': '成功访问首页', 'msg_code': 200}
-------开始打印request常见响应方法内容---------------
查看响应内容,res.text 返回的是Unicode格式的数据
{"msg": "成功访问首页", "msg_code": 200}
查看响应内容,res.content返回的字节流数据(主要用于存储图片)
b'{"msg": "\xe6\x88\x90\xe5\x8a\x9f\xe8\xae\xbf\xe9\x97\xae\xe9\xa6\x96\xe9\xa1\xb5", "msg_code": 200}'
查看完整url地址,res.url
http://127.0.0.1:8888/index
查看响应头部字符编码,res.encoding
utf-8
查看响应码,res.status_code
200
-------结束打印request常见响应方法内容---------------
2.post方式,url格式入参访问接口,返回值:
{'msg': '成功访问文章', 'msg_code': 200}
3.post方式,form-data格式入参访问接口,返回值:
{'msg': '登录成功', 'msg_code': 200}
4.post方式,josn格式入参访问接口,返回值:
{'msg': '登录成功', 'msg_code': 200}
5.访问百度打印colies,返回值:
{'BDORZ': '27315'}
6.需要登录才可以看到资源,通过session可直接查看,返回值:
200
D:\pythonaz\lib\site-packages\urllib3\connectionpool.py:997: InsecureRequestWarning: Unverified HTTPS request is being made to host 'www.12306.cn'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
warnings.warn(
7.访问12306,设置不验证ssl,verify = False,返响应状态码:
200

三、问题

1. json转字典,json格式入参问题

问题描述,发送get请求,响应内容转字典,如requests.get(url).json(),报错:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

原因:

1.响应内容不是json{key:vaule}格式;
2.json格式入参,如res = requests.post(url, data=data, headers = headers),入参data值为字典类型
3.字符转字典,字符个数不是key-value个数,或者key-vaule用的是单引号,如json.loads('key':'value')

解决方案:

1.响应内容必须是json格式才可以调用josn转字典json()方法
2.json格式入参,如res = requests.post(url, data=data, headers = headers),入参data值必须转换为字符类型
3.字符转字典,必须保证是key-vaule,并且参数引号必须用双引号,如json.loads("key":"value")

2. 接口无法访问

问题描述:发送get请求,requests.get(url),报错如下:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=8888): Max retries exceeded with url: /index (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000025527634A00>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))

原因:1.8888端口无法访问;2.接口服务未开启

解决方案:1.设置8888端口可访问;2.开启接口服务

3. 发送个get/post失败

问题描述:发送get:request.get("http://www.baidu.com"),报错如下:

AttributeError: 'function' object has no attribute 'get'

原因:1.代码错误;2.变量名与系统(包括扩展库或者保留字)的重复

解决方法:本例是代码错误,request改为requests

相关推荐

数控系统常见术语详解,机加工人士必备资料
数控系统常见术语详解,机加工人士必备资料

增量编码器(Incrementpulsecoder)回转式位置测量元件,装于电动机轴或滚珠丝杠上,回转时发出等间隔脉冲表示位移量。由于没有记忆元件,故不能准...

2023-09-24 17:42 xiyangw

功、功率、扭矩的关系

功=功率×时间work=power×timeW=P×T功=力×距离work=force×lengthW=F×LP×T=F×LP=F×L/T=F×V(velocity)具体到电机输出轴上,圆...

Wi-Fi协议(802.11 )常见专业术语汇总
Wi-Fi协议(802.11 )常见专业术语汇总

Wi-Fi协议(802.11)常见专业术语汇总AP(Accesspoint的简称,即访问点,接入点):是一个无线网络中的特殊节点,通过这个节点,无线网络中的...

2023-09-24 17:41 xiyangw

不需要策略模式也能避免满屏if/else
不需要策略模式也能避免满屏if/else

满屏if/elsejava复制代码publicstaticvoidmain(String[]args){inta=1;if...

2023-09-24 17:41 xiyangw

喜极而泣,我终于干掉了该死的 if-else
喜极而泣,我终于干掉了该死的 if-else

推荐阅读:面试淘宝被Tomcat面到“自闭”,学习这份文档之后“吊打”面试官刷完spring+redis+负载均衡+netty+kafka面试题,再去面试BAT...

2023-09-24 17:40 xiyangw

Python中使用三元运算符简化if-else语句
Python中使用三元运算符简化if-else语句

Python是一种极简主义的编程语言,相比其他编程语言,在多个地方简化了代码的写法,可以让我们用更少的时间更简洁地完成工作。以赋值运算符为例:a=a+b简化...

2023-09-24 17:40 xiyangw

雅思课堂 | 雅思口语写作句型第二讲
雅思课堂 | 雅思口语写作句型第二讲

纯干货,无废话用最少的时间学最制胜的内容!泡图书馆泡不过学霸?碎片时间也能弯道超车!向着雅思8分行动起来吧!雅思口语写作句型1.Ipreferseeing...

2023-09-24 17:39 xiyangw

设计模式(三)——简单的状态模式代替if-else
设计模式(三)——简单的状态模式代替if-else

博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注。一起学习,一起成长。前言大多数开...

2023-09-24 17:38 xiyangw

如何优化代码中大量的if/else,switch/case?

前言随着项目的迭代,代码中存在的分支判断可能会越来越多,当里面涉及到的逻辑比较复杂或者分支数量实在是多的难以维护的时候,我们就要考虑下,有办法能让这些代码变得更优雅吗?正文使用枚举这里我们简单的定义一...

优秀程序员早就学会用“状态模式”代替if-else了
优秀程序员早就学会用“状态模式”代替if-else了

2020年已经进入倒计时了,大家立好的flag完成了吗?2020实“鼠”不易,希望2021可以“牛”转乾坤。简介状态模式是行为型设计模式的一种。其设计理念是当对...

2023-09-24 17:37 xiyangw

用Select Case语句对执行多条件进行控制
用Select Case语句对执行多条件进行控制

今日的内容是"VBA之EXCEL应用"的第六章"条件判断语句(If...Then...Else)在VBA中的利用"。这讲是第三节...

2023-09-24 17:37 xiyangw

c#入门教程(四)条件判断if else

条件判断,是编程里常用的判断语句,比如某个代码如果满足条件就执行a代码块否则就执行b代码块。案例1:inti=2*5;if(a>0){执行a代码块}elseif(a<0){执行b代码块...

每日学编程之JAVA(十一)—条件语句(if……else)

一个if语句包含一个布尔表达式和一条或多条语句。如果布尔表达式的值为true,则执行if语句中的代码块,否则执行if语句块后面的代码。if语句后面可以跟else语句,当if语句...

不需要策略模式也能避免满屏if/else

除了使用策略模式以外,还可以使用其他设计模式来避免满屏if/else的问题。以下是一些可能的解决方案:工厂模式:将if/else语句移到工厂类中,由工厂类负责创建对象。这样可以将if/else语句从客...

围绕ifelse与业务逻辑的那些梗
围绕ifelse与业务逻辑的那些梗

ifelse很重要,几乎是程序员编程核心,业务逻辑与规则也通过ifelse体现出来,语句简单但是背后文章很大,先看几则幽默图:1.也许默认使用returnf...

2023-09-24 17:36 xiyangw

取消回复欢迎 发表评论: