一、先了解几个重要的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')
 

最新文章

  1. 我的AngularJS 学习之旅
  2. Perl技巧
  3. 基于jquery实现拆分姓名的方法
  4. UIButton 一个控件 实现 左图标右文本的效果
  5. POJ2115 C Looooops 模线性方程(扩展欧几里得)
  6. 后端接收不到AngularJs中$http.post发送的数据的问题
  7. win7下安装搭建PHP环境
  8. 利用SVNKit进行版本库的树的导出
  9. 用hmmlearn学习隐马尔科夫模型HMM
  10. R语言之内存管理
  11. &quot;双非&quot;应届生校招如何获得大厂青睐?(内附技术岗超全求职攻略)
  12. windows常用快捷键和指令
  13. EffectiveC++ 第4章 设计与声明
  14. SQL求几何重心
  15. Diffuse贴图+Lightmap+Ambient
  16. 微服务-开发框架之springboot by 大雄daysn
  17. SpringCloud分布式配置中心所遇问题
  18. 通过SIMPLE_DEV_PM_OPS定义suspend和resume函数【转】
  19. xampp配置多个监听端口和不同的网站目录
  20. SOA (面向服务的架构)-Service Oriented Architecture

热门文章

  1. hihocoder 1331 扩展二进制数(递归)
  2. “玲珑杯”线上赛 Round #17 河南专场 A: Sin your life(和化积公式)
  3. sql server编写通用脚本自动统计各表数据量心得
  4. Springboot配置类
  5. POJ 1177 Picture(线段树 扫描线 离散化 求矩形并面积)
  6. android 多线程(二)
  7. 洛谷 P1892 团伙
  8. h5-18-文件操作-兼容判断
  9. excel之实验数据处理线性拟合
  10. 降低winnt Apache服务的权限,让你的虚拟主机更安全