基础篇Python发送Get请求之如何放请求头、参数、获取返回内容

开发 后端
本篇文章写的是用代码发送简单的 get 请求,我有自己整理笔记的习惯,虽然网上这类的教程很多,但是坑也很多,自己写的自己看放心一些。

 [[381530]]

目录

  • 一、Python 命名规范
  • 二、发送 get 请求
    • 1.安装 requests
    • 2.发送 get 请求
    • 3.如何判断发送 get 请求要不要传请求头部?
    • 4.传入请求头
    • 5.权限被拒:403 - Forbidden: Access is denied
  • 三、response 的返回内容还有其它更多信息

一、Python 命名规范

  • 1.是英文字符、下划线__、数字三个组成。
  • 2.项目(工程)名称、文件包名、模块名称等是英文开头,不能纯数字,下划线开头的有特殊含义,不能乱用。
  • 3.脚本的名称不能跟系统的模块或第三方模块重复,例如requests/unittest/selenium等。
  • 4.函数、类、方法、参数的名称不能和系统现有的名称重复。
  • 5.类名称必须大写字母开头。除了类名称,其它地方都用小写开头。命名规范最好遵守驼峰法和下划线法,例如:qingHan、qing_han
  • 6.不要用中文、特殊字符(:;@等),有些特殊字符是有特殊作用的。

二、发送 get 请求

1.安装 requests

cmd 中安装 requests:

安装:pip install requests

卸载:pip uninstall requests

查看:pip list

切记安装的时候把抓包工具关了。

如果安装报错 timeout,因为没 fq,可以这样装:

  1. pip install -i http://mirrors.aliyun.com/pypi/simple/ requests 

附上国内常见的镜像源

  1. 阿里云 http://mirrors.aliyun.com/pypi/simple/
  2. 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
  3. 豆瓣(douban) http://pypi.douban.com/simple/
  4. 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
  5. 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

requests 官方文档:https://requests.readthedocs.io/zh_CN/latest/

2.发送 get 请求

一个完整的 get 请求,应该包括请求行(url)和请求头(headers)、请求参数(params)。

  1. import  requests 
  2.  
  3. # get请求:url+params请求参数 
  4. url="http://v.juhe.cn/laohuangli/d" 
  5.  
  6. # params  建议参数单独拿出来,这样写 
  7. p={"key":"abf91475fc19f66c2f1fe567edd75257"
  8. "date":"2014-09-11"
  9. a=requests.get(url,params=p)  #发请求 
  10. print(a.status_code)#状态码 
  11. print(a.text)#raw 文本内容 
  12. print(a.headers)#dict 
  13. print(a.headers['Date'])#key 
  14. print(a.cookies)#RequestsCookieJar 

3.如何判断发送 get 请求要不要传请求头部?

先在 fiddler 中去掉请求头部,用这个接口发下请求试试,如果是正常返回 200 就可以不传头部,如果在工具中发送请求后,提示 403 - Forbidden: Access is denied,那么就需要传头部。

请求头中那么多参数,哪些参数需要呢?

在工具中把请求头中的参数挨个删掉试试,不行的话就要加上了。

 

这个是看开发怎么实现的了,自己写接口自动化代码的时候最好写上请求头,这样规范一些。

4.传入请求头

头部写成字典格式,headers=headers,传入请求头。

有些响应内容是 gzip 压缩的,text 只能打印文本内容,用 content 是二进制流。一般获取返回值内容,推荐用 content。

  1. import  requests 
  2. url="https://www.baidu.com" 
  3.  
  4. # 构建请求头 
  5. headers = { 
  6.     'User-Agent''Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36' 
  7.  
  8. r=requests.get(url,headers=headers) 
  9. print(r.status_code) 
  10. print(r.text)# html乱码 
  11. print(r.content.decode("utf-8"))  #decode解压缩展示中文 

5.权限被拒:403 - Forbidden: Access is denied

url 和请求参数都对,却没权限。可能原因:服务器识别到你是代码请求的,防脚本机制。

解决办法:需要身份验证,代码中的请求头部加上 cookies)。例如:

图片来自网络

 

三、response 的返回内容还有其它更多信息

  • a.status_code 响应状态码。
  • a.content 字节方式的响应体,会自动为你解码 gzip 和 eflate 压缩。
  • a.headers 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回 None。
  • a.json() Requests 中内置的 JSON 解码器 ,json 转成 python 的字典了。
  • a.url 获取 url。
  • a.encoding 编码格式。
  • a.cookies 获取返回的 cookie。
  • a.text字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
  • a.raise_for_status() 失败请求(非 200 响应)抛出异常。

注:本篇文章写的是用代码发送简单的 get 请求,我有自己整理笔记的习惯,虽然网上这类的教程很多,但是坑也很多,自己写的自己看放心一些。不喜勿喷,如有需要,自行抱走,后续会更新深入一些的文章。

本文转载自微信公众号「清菡软件测试」,可以通过以下二维码关注。转载本文请联系清菡软件测试公众号。

 

责任编辑:武晓燕 来源: 清菡软件测试
相关推荐

2020-10-09 08:29:24

POSTGET参数

2021-02-14 23:01:16

Python参数请求

2023-11-27 08:57:24

GoGET

2021-03-06 09:54:22

PythonHTTP请求头

2015-10-27 11:06:51

PHPGETPOST

2015-08-06 13:33:22

PHPGETPOST

2022-11-22 08:41:22

curlDELETELinux

2009-06-06 19:25:44

javaServlet基础结构

2009-07-09 14:56:23

Servlet读取

2021-12-03 09:49:59

鸿蒙HarmonyOS应用

2019-12-23 11:02:12

HTTP请求头网络协议

2011-08-03 14:33:54

IOS4.2 HTTP 请求

2013-03-28 14:11:10

iOS异步GET方法请

2021-06-17 09:32:39

重复请求并发请求Java

2021-03-27 22:21:48

HTTPPython数据

2021-08-26 06:58:14

Http请求url

2021-05-30 09:25:48

HttpETag 网络协议

2022-10-13 19:14:17

Python网络资源

2010-01-05 15:30:25

JSONP

2020-10-30 09:48:03

Hi3861开发板get请求
点赞
收藏

51CTO技术栈公众号