requests补充

HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中,POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。

这里主要讨论一下requests模仿浏览器请求的四种方式。

一、application/x-www-form-urlencoded

这种方式的传递参数,在requests中,属于get的方法。会有一个字典形式的数据,然后我们在请求的时候:

import requests

url = ‘https://i.cnblogs.com/EditPosts.aspx?opt=1‘
parameter = {
    ‘123‘: ‘456‘,
    ‘234‘: ‘345‘
}
r = requests.get(url, params=parameter)

  

这种请求方式比较常见,一般学requests的时候都会用到。

二、multipart/x-www-form-data

这种属于post中上传文件的方式,具体代码:

url = ‘https://i.cnblogs.com/EditPosts.aspx?opt=1‘
files = {‘app_id‘: (None, ‘123456‘),
         ‘version‘: (None, ‘2256‘),
         ‘platform‘: (None, ‘ios‘),
         ‘libzip‘: (‘libmsc.zip‘, open(‘C:\Users\danwang3\Desktop\libmsc.zip‘, ‘rb‘), ‘application/x-zip-compressed‘)
 }
response = requests.post(url, files=files)

# 代码是从http://blog.csdn.net/j_akill/article/details/43560293,拷贝来的,没有用过。

  

这种请求方式,在做爬虫的时候很少会遇见,如果有需求,requests也是可以实现这样的方式进行post提交的。

三、application/json

这种方式和第一种的使用率是一样的,都很高,也得益于json格式的流行。很常见的post请求数据格式。

import requests

url = ‘https://i.cnblogs.com/EditPosts.aspx?opt=1‘
form_data = {
    ‘123‘: ‘456‘,
    ‘234‘: ‘345‘
}
r = requests.get(url, data=form_data)

  

这种请求方式,代码也比较简洁,很常见。

四、text/xml

这种请求方式,是不才最近刚遇到的一种方式。之前也没有接触过,它是使用post请求方式给服务器端发送了一个带HTML标签的字符串。这种在编写的时候也比较简单,但是因为不常见,所以也困扰了比较长的时间。

url = ‘https://i.cnblogs.com/EditPosts.aspx?opt=1‘
payload = ‘‘‘
<buffalo-call>
<method>getCode</method>
<map>
<type>java.util.HashMap</type>
<string>ABC</string>
<string>123654</string>
<stringID</string>
</map>

</buffalo-call>
‘‘‘
headers = {
    ‘Content-Type‘: ‘text/xml;charset=UTF-8‘
}
r = requests.post(url, data=payload, headers=headers)
# 注:在遇到这种数据方式的时候,我们一定要对请求头的‘Content-Type‘进行设置,让它的值为‘text/xml‘

  

因为这种形式的请求很少见,所以难免会造成一些困惑,记下来以便后续查询,也希望能帮助刚接触requests的小伙伴。

时间: 2024-11-10 07:14:45

requests补充的相关文章

2016/09/20

1. Python序列化之pickle模块 - 用于[python特有的类型]和[python基本数据类型]间进行转换 - pickle模块提供了四个功能:dumps.dump.loads.load - json更加适合跨语言 基本数据类型的序列化  pickle仅适用于python 复杂类型的序列化 # import json # dic = {'k1': 'v1'} # print(dic, type(dic)) # # res = json.dumps(dic) # 将python的基本数

Learn_Day12 模块2:模块1内容补充、requests模块、xml模块

模块1内容补充: vars()    python自动设置的全局变量 在py文件开头用三引号注释,表示是对py文件本身的注释 __doc__    py文件本身的文件注释 __file__    文件路径 __package__    导入py文件(自定义模块)的位置(文件夹,目录),用"."分割 __cached__    缓存,python2版本无此属性 __name__    默认 __main__:主文件执行主函数前用作判断 json.loads(形似对象)    用于将形似列

python requests请求卡住问题

最近经常接到别人反馈某个爬虫工具程序没有正常运行,需要下载的资讯数据也没有及时进行收录. 刚开始以为可能是机器的问题,偶尔机器会出现程序运行中途卡住的情况. 但随着异常的情况越来越频繁,我便只好去排查问题. 通过查看程序运行的日志信息,发现程序总是卡在requests请求的那一步. 这让我觉得很奇怪,这一步为什么会卡住呢,我已经设置了超时时间,按理说超时的话程序会进入异常啊,然而却什么异常信息都没有输出. 查找了相关的资料,发现确实存在这种情况. requests文档上有写,timeout is

python_day7【模块configparser、XML、requests、shutil、系统命令-面向对象】之篇

python内置模块补充 一.configparser configparser:用户处理特定格式的文件,其本质是利用open打开文件 # 节点 [section1] #键值对k1 = v1 k2:v2 k1 = v1 #建:k1 k2 k2:v2 [section2] k1 = v1 k3:v3 [section3] k3 = v3 k4:v4 [section4] k4 = v4 k5:v5 在configparser默认将获取的元素当做一个字符串进行处理,不用特定执行元素的类型 1.获取所

ImportError: No module named &#39;requests&#39;

补充说明: 当前环境是在windows环境下 python版本是:python 3.4. 刚开始学习python,一边看书一边论坛里阅读感兴趣的代码, http://www.oschina.net/code/snippet_1406266_43470 的代码运行报错情况及解决方案. 1. ImportError: No module named 'requests' Traceback (most recent call last): File "piece_full_down_image.py

[实战演练]python3使用requests模块爬取页面内容

本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取响应状态码 5.案例演示 后记 1.安装pip 我的个人桌面系统用的linuxmint,系统默认没有安装pip,考虑到后面安装requests模块使用pip,所以我这里第一步先安装pip. $ sudo apt install python-pip 安装成功,查看PIP版本: $ pip -V 2.

ImportError: No module named ‘requests‘

补充说明: 当前环境是在windows环境下 python版本是:python 3.4. 刚开始学习python,一边看书一边论坛里阅读感兴趣的代码, http://www.oschina.net/code/snippet_1406266_43470 的代码运行报错情况及解决方案. 1. ImportError: No module named 'requests' Traceback (most recent call last): File "piece_full_down_image.py

day 34 编程之补充内容

生产消费者模型(必须要理解并且牢记,默写内容): from multiprocessing import Process,Queue import time,random,os def procducer(q): for i in range(10): res='包子%s' %i time.sleep(0.5) q.put(res) print('%s 生产了 %s' %(os.getpid(),res)) def consumer(q): while True: res=q.get() if

请求库之requests模块

一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下载下来以后,并不会执行js代码,这需要我们自己分析目标站点然后发起新的request请求 #安装:pip3 install requests #各种请求方式:常用的就是requests.get()和requests.post() >>> import requests >>&