urllib学习二

昨天我们看了一下urlib库的get请求功能,今天我们来看一下POST的请求。首先我们需要看一下一个post请求都有哪些内容。

首先我们找一个http的搜索引擎,我这边使用的www.mybu.net,访问这个网站后我们在搜索引擎上检索一个词,查看url的请求格式。如:

我们看到url格式中包含如下四个字段

search=python
submit.x=0
submit.y=0
mode=allwords

除了这个search字段为我们在输入框输入的内容外其它几个字段我也不清楚是什么意思,但是我们也不用管它。我们只需要了解字段类型就可以了。接下来我们就构造一个数据字典,并通过eulencode函数将其编码为url类型格式。

dict = {
    'search':'python',
    'submit.x':0,
    'submit.y':0,
    'mode':'allwords'
}
data = urllib.parse.urlencode(dict).encode('utf-8')

接下来我们还可以构造一个http请求headers头部,主要包含如下内容:

User-Agent :这个头部可以携带如下几条信息:浏览器名和版本号、操作系统名和版本号、默认语言。这个数据可以从 网页开发工具上的请求反应信息中获取(浏览器上一般按 F12 打开开发工具)。作用是用于伪装浏览器。

Referer:可以用来防止盗链,有一些网站图片显示来源 https://*.com ,就是检查 Referer 来鉴定的。

Connection:表示连接状态,记录 Session 的状态。

origin_req_host:请求方的 host 名称或者 IP 地址。

unverifiable:指请求无法验证,默认为 False。用户并没有足够的权限来选择接收这个请求结果,例如请求一个 HTML 文档中的图片,但没有自动抓取图像的权限,这时 unverifiable 为 True。

method:指定请求使用的方法,例如 GET、POST、PUT 等。

我就定义一个修改了浏览器类型和连接类型的头部,具体代码如下:

headers = {
    'User-Agent':'Post_Multipart',
    'Connection': 'keep-alive'
}

准备工作做好了之后,我们就将dict、headers和url整合成一个整体了。完整代码如下:

import urllib.request
import urllib.parse


url2 = ' http://www.mybu.net/search.asp'
headers = {
    'User-Agent':'Post_Multipart',
    'Connection': 'keep-alive'
}
dict = {
    'search':'python',
    'submit.x':0,
    'submit.y':0,
    'mode':'allwords'
}
data = urllib.parse.urlencode(dict).encode('utf-8')
req=urllib.request.Request(url=url,data=data,headers=headers)
f = urllib.request.urlopen(req)
print(f.geturl())
page = f.read()
print(page)

返回结果为:

从上面的例子可以看出,同样是urlopen函数,当我们的请求数据中携带data参数时,请求方式就是POST方式,当我们的请求数据中不携带data参数时,请求方式就是GET方式。

本文分享自微信公众号 - 菜鸟小白的学习分享(cainiao-xiaobai),作者:菜鸟小白的学习分享

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 10分钟教你搭建一个可公网访问的私人网盘,和付费网盘彻底say goodbye~

    今天偶然间看一个私人网盘的搭建,给大家一起分享一下。我这边是在windows环境下运行的。

    菜鸟小白的学习分享
  • 想做一个天气推送程序,却被和风天气API的示例代码调试得快吐了

    最近各地好像都被暴雨袭击了,菜鸟小白就在想能不能通过python实现实时天气的定时推送呢?其实不用想,肯定是可以的。菜鸟小白百度到了一个和风API接口,...

    菜鸟小白的学习分享
  • 最近合肥降雨不断,给自己做一个天气情况微信定时推送吧

    APScheduler是一个 Python 定时任务框架,使用起来十分方便。提供了基于日期、固定时间间隔以及 crontab 类型的任务,并且可以持久化...

    菜鸟小白的学习分享
  • 你真的了解小程序的自定义编译功能嘛?

    微信开发者工具最新的版本里面已经校验了app.json里面的重复pages,之前可以直接把你想要的page放在第一行,默认就会先加载这个page,现在只能通过自...

    连胜
  • ASP.NET页面周期学习笔记之一

    ASP.NET页面生命周期——理解:重中之重!!! 1.基本概念:所谓的页面生命周期,指的是一个ASP.NET页面类对象从初始化到销毁经过的步凑过程; 2.大致...

    Edison Zhou
  • 请求合并哪家强

    工作中,我们常见的请求模型都是请求-应答式,即一次请求中,服务给请求分配一个独立的线程,一块独立的内存空间,所有的操作都是独立的,包括资源和系统运算。我们也知道...

    枕边书
  • Python爬虫 | 认知爬虫之请求与响应

    学习Python爬虫不仅充满趣味性,并垫基Python编程语言功底。可以说是入门IT行业的一条捷径,达到娱乐、学习二合一。喜欢看小说,搞笑图片?找工作还在一条一...

    数据山谷
  • Zookeeper、kafka部署

    itliusir
  • snowflake升级版全局id生成

    1. 背景 分布式系统或者微服务架构基本都采用了分库分表的设计,全局唯一id生成的需求变得很迫切。 传统的单体应用,使用单库,数据库中自增id可以很方便实现。分...

    aoho求索
  • 【IoT应用创新大赛】基于LoRa的智慧办公场景方案

    随着物联网技术的发展,越来越多的应用需求被提及,整个物联网产业链的基础设施也得到快速发展。以腾讯、阿里为首的头部云计算企业,纷纷推出了物联网设备接入的基础设施(...

    古月瘦水

扫码关注云+社区

领取腾讯云代金券