详解python requests中的post请求的参数问题

作者:润年 时间:2023-09-20 07:50:40 

问题:最新在爬取某站点的时候,发现在post请求当中,参数构造正确却获取不到数据,索性将post的参数urlencode之后放到post请求的url后面变成get请求,结果成功获取到数据,对此展开疑问。

1.http请求中Form Data和Request Playload的区别:

  Ajax post请求中常用的两种参数形式:form data 和 request payload

  get请求的时候,我们的参数直接反映在url里面,为key1=value1&key2=value2形式,如果是post请求,那么表单参数是在请求体中,也是以key1=value1&key2=value2的形式在请求体中。通过chrome的开发者工具可以看到如下

a.Form Data类型:

这种情况有两种处理方式,一个是把这个post请求变成get请求,即把请求参数通过"?key1=value1&key2=value2"拼接在url当中,然后以get方式请求就可以了:response = requests.get(url,headers=headers),其中url为拼接的url

另一种是仍然用post请求,将参数放在data中:response = requests.post(url,headers=headers,data=data),其中url为post url.

详解python requests中的post请求的参数问题

注意上图中红圈内的内容,这里请求头中的Content-Type为application/x-www-form-urlencoded,点击Form Data旁边的view source,变成了key1=value1&key2=value2形式,如下图,这时你可以将这部分内容加到post的Request URL后面使它变成一个get请求,就可以获取到数据了,

详解python requests中的post请求的参数问题

b.Request Payload类型

详解python requests中的post请求的参数问题

同样在chrome浏览器开发者工具中可以看到它们不同的地方,Content-Type为application/json,表明需要传的是一个json类型的对象,点击view source,如下图

详解python requests中的post请求的参数问题

自动变成了json类型,这时必须发post请求,将这json对象传入才可获取数据。形如:

response = requests.post(url,json=data,headers=headers) 相比普通的post,这个post参数中的data一定要序列化才行。

参考:https://stackoverflow.com/questions/10494574/what-is-the-difference-between-form-data-and-request-payload

来源:https://blog.csdn.net/he_ranly/article/details/104048694/

标签:python,requests,post请求
0
投稿

猜你喜欢

  • 如何更快更好地调试ASP程序代码?

    2009-11-23 20:13:00
  • PHP+jQuery+Ajax实现多图片上传效果

    2024-05-22 10:05:59
  • flask SQLAlchemy连接数据库及操作的实现

    2024-01-28 09:23:29
  • 关于vue父组件调用子组件的方法

    2024-04-09 10:47:43
  • Go语言的互斥锁的详细使用

    2024-03-11 04:04:30
  • python paramiko远程服务器终端操作过程解析

    2022-10-08 00:50:14
  • 基于TensorFlow中自定义梯度的2种方式

    2023-02-02 22:34:41
  • python 串行执行和并行执行实例

    2022-07-12 07:32:58
  • python中的不可变数据类型与可变数据类型详解

    2022-12-27 21:56:24
  • python实现csdn全部博文下载并转PDF

    2023-08-13 05:26:41
  • 关于AJAX缓存数据

    2008-03-26 12:11:00
  • python进阶_浅谈面向对象进阶

    2022-01-22 17:02:06
  • 不错的一篇关于javascript-prototype继承

    2024-04-23 09:15:42
  • window安装mysql(zip、noinstall)

    2009-10-17 21:10:00
  • Shellcode加密解密函数

    2009-04-24 11:18:00
  • Python中的Classes和Metaclasses详解

    2022-07-08 09:28:47
  • 浅谈Python peewee 使用经验

    2023-09-14 14:20:55
  • JS 类型转换常见方法小结

    2024-04-17 09:49:17
  • 给大家整理了19个pythonic的编程习惯(小结)

    2024-01-02 08:00:05
  • pyqt5打包成exe可执行文件的方法

    2022-02-09 11:25:57
  • asp之家 网络编程 m.aspxhome.com