一、先了解几个重要的http请求头或响应头信息

Request Headers:

Host:
描述请求将被发送的目的地,包括,且仅仅包括域名和端口号。
Origin:
说明请求从哪里发起的,包括,且仅仅包括协议和域名,并没有包含涉及到用户隐私的URL路径和请求内容。可以防止CSRF的攻击。origin只用于Post请求。
Referer:
告知服务器请求的原始资源的URI,包括:协议+域名+查询参数(注意,不包含锚点信息)。其用于所有类型的请求。
因为原始的URI中的查询参数可能包含ID或密码等敏感信息,如果写入referer,则可能导致信息泄露。

Reponse Headers:

 Location: 重定向之后要跳转的地址

二、用requests库,模拟http请求:

1.导入 requests 模块:

注:如果没有安装,先要通过 pip install requests 安装requests模块

 import requests

2.发送get请求

res = requests.get('https://www.baidu.com')

3.发送带参数的get请求

payload = {'key1': 'value1', 'key2': 'value2'}
res = requests.get("http://www.baidu.com", params=payload)

通过打印输出该 URL,你能看到 URL 已被正确编码:

print(res.url)
http://www.baidu.com?key2=value2&key1=value1

你还可以将一个列表作为值传入:

payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
res = requests.get('http://www.baidu.com', params=payload)
print(res.url)
http://www.baidu.com?key1=value1&key2=value2&key2=value

4.发送post请求

 res = requests.post('http://httpbin.org/post', data = {'key':'value'})

(1)通常,你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单,

对应Content-Type:application/x-www-form-urlencodedmultipart/form-data,默认是前者,multipart/form-data一般是文件上传时使用。

要实现这个,只需简单地传递一个字典(名称/值对的形式)给 data 参数。你的数据字典在发出请求时会自动编码为表单形式:

payload = {'key1': 'value1', 'key2': 'value2'}
res = requests.post("http://httpbin.org/post", data=payload)
print(res.text)
结果:
{
  ...
  "form": {
    "key2": "value2",
    "key1": "value1"
  },
  ...
}

(2)很多时候你想要发送的数据并非编码为表单形式的,而是json格式的(本质就是字符串),对应Content-Type:application/json。有两种方法:

方法一:
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
res = requests.post(url, data=json.dumps(payload))
方法二:
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
res = requests.post(url, json=payload)

三、http请求的响应

res = requests.get('http://en.wikipedia.org/wiki/Monty_Python')
任何时候进行了类似 requests.get() 的调用,你都在做两件主要的事情。
其一,你在构建一个 Request 对象, 该对象将被发送到某个服务器请求或查询一些资源。
其二,一旦 requests 得到一个从服务器返回的响应就会产生一个 Response 对象。该响应对象包含服务器返回的所有信息,也包含你原来创建的 Request 对象。
res.headers   --> 服务器返回给我们的响应头部信息
res.request.headers --> 发送到服务器的请求的头部信息
res.status_code --> 响应状态码
res.text --> 以文本的方式访问请求响应体
res.content --> 以字节(二进制)的方式访问请求响应体
res.url --> 服务器接收到的请求URL
res.cookies --> 响应返回的cookies,返回对象为<RequestsCookieJar[xxxx]>
res.history --> 响应对象的 history 方法来追踪重定向
res.history[0].headers.get('Set-Cookie')
 

用python的Requests库模拟http请求的更多相关文章

  1. python利用requests库模拟post请求时json的使用

    我们都见识过requests库在静态网页的爬取上展现的威力,我们日常见得最多的为get和post请求,他们最大的区别在于安全性上: 1.GET是通过URL方式请求,可以直接看到,明文传输. 2.POS ...

  2. 使用Python的requests库作接口测试——请求对象与响应对象

    任何时候调用requests.*()操作接口时,我们都在做两件事情: 1.构建一个Request对象,该对象被发送到服务器去请求或查询一些资源: 2.一旦requests得到一个从服务器返回的响应,就 ...

  3. 『居善地』接口测试 — 5、使用Requests库发送POST请求

    目录 1.请求正文是application/x-www-form-urlencoded 2.请求正文是raw (1)json格式文本(application/json) (2)xml格式文本(text ...

  4. 【python爬虫】用requests库模拟登陆人人网

    说明:以前是selenium登陆取cookie的方法比较复杂,改用这个 """ 用requests库模拟登陆人人网 """ import r ...

  5. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  6. requests库的post请求

    requests库的post请求 #coding:utf-8 import requests import json class Trans(object): def __init__(self, w ...

  7. 【转】使用Python的Requests库进行web接口测试

    原文地址:使用Python的Requests库进行web接口测试 1.Requests简介 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写, ...

  8. Python爬虫—requests库get和post方法使用

    目录 Python爬虫-requests库get和post方法使用 1. 安装requests库 2.requests.get()方法使用 3.requests.post()方法使用-构造formda ...

  9. 『居善地』接口测试 — 4、Requests库发送GET请求

    目录 1.使用Requests库发送带参数的GET请求 2.查看GET请求的内容 3.带请求头.参数的Get请求 Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求. ...

随机推荐

  1. hdu 1573 X问题【扩展中国剩余定理】

    扩展中国剩余定理的板子,合并完之后算一下范围内能取几个值即可(记得去掉0) #include<iostream> #include<cstdio> #include<cm ...

  2. PJzhang:lijiejie的敏感目录爆破工具BBScan

    猫宁!!! 参考链接: https://www.freebuf.com/sectool/85729.html https://segmentfault.com/a/1190000014539449 这 ...

  3. Luogu P1156 垃圾陷阱 【dp】By cellur925

    题目传送门 这题...看上去浓浓的背包气息...但是并不好设计状态啊emmm. 我们考虑可能成为状态的量:高度.血量.时间.物品.看数据范围也猜到应该大概是个二维dp了w. 正确的状态设计之一:设$f ...

  4. pycharm命令行快捷启动

    打开 本用户目录下的.bashrc文件 vim .bashrc 在末尾添加一行 alias pycharm="the-path-to-pycharm.sh" 最后保存退出 然后更新 ...

  5. mac 配置nginx 虚拟域名(转载)

    我是通过homebrew 安装nginx 的,所以安装目录是默认的,之前多个server都是放在默认安装目录下的nginx.conf里的,但是这样不太好,就是会导致nginx.conf 越来越长,而且 ...

  6. Hadoop端口访问

    Hadoop集群默认端口 Hadoop本地开发,9000端口拒绝访问

  7. [WOJ1138]最大子序和

    题目链接: WOJ1138 题目分析: 是很经典的一道题,乱搞的方法应该有不少,这里介绍O(n)的单调队列做法 首先维护一个前缀和,然后枚举每一个位置,维护一个前缀和单增的单调队列,但队列仅储存下标, ...

  8. Painful Bases LightOJ - 1021

    Painful Bases LightOJ - 1021 题意:给出0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F中的一些字符(不重复)还有一个进制base,求这些字符的排列形成的ba ...

  9. HDU 1223 打表 + 大数

    http://acm.hdu.edu.cn/showproblem.php?pid=1223 一般遇到这些题,我都是暴力输出前几项,找规律.未果. 然后输出n = 1时候,以A开始,有多少个答案, n ...

  10. websocket 加layim实现在线聊天系统

    实现流程: 1.浏览器连接服务器时保存所有用户id以及对应的唯一session(session用户用户消息推送). 1.1:判断登录用户是否有离线消息(个人消息以及群消息),有则将离线消息进行推送给登 ...