Scrapy处理post请求 Request payload 和 Form Data类型值

首先看一下图一常见的Form Data类型的请求
在这里插入图片描述
下面图二是Request payload 类型的请求
在这里插入图片描述
重点看打红框框的两个地方,分析一下两种类型的请求头中的参数Content-Type

Form Data 的 Content-Type: application/x-www-form-urlencoded 请求的数据格式为 key1=value1&key2=value2
Request payload的 Content-Type: application/json 请求的数据格式为json格式

scrapy的post请求处理FormRequest 默认的请求头参数是Content-Type: application/x-www-form-urlencoded
看一下源码,如下图中,第二个红框框中设置的默认Content-Type
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再看一下第一个红框框中的源码,理解一下 “items = formdata.items() if isinstance(formdata, dict) else formdata”
这个是python中 if-esle的一种简洁写法,表示 “一行表达式, 为真时放if前”

从源码中可以看出FormRequest传输的formdata必须要为dict类型,如果formdata中的value值有int类型的必须转为str类型,否则会报错,如下图所示
在这里插入图片描述
看一下scrapy Request源码,如下图所示:
在这里插入图片描述
传入body时,是传入一个字符串类型,所以需要调用json.dumps() 方法将dict转为str。
否则会报错,如下图所示:
在这里插入图片描述
总结:所以两个类型的scrapy处理方式是不一样的
Form Data的处理方式:
yield scrapy.FormRequest(url=self.url, formdata=self.form_data, headers=self.header, callback=self.parse_list})

Request payload的处理方式:
yield scrapy.Request(url=self.url, body=json.dumps(self.data), method=‘POST’, headers=self.header, callback=self.parse_list)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值