scrapy post请求 formdata/body传值问题

关于 scrapy post 提交一直有疑惑,不知道选用那种姿势。
scrapy Post 发送数据是我们通常会用

 yield scrapy.FormRequest( 
 			url = url, 
 			formdata = {"aaa" : "xxx", "bbb" : "xxxxx"},  
 			callback = self.parse
        ) 
        
 这个请求默认的header:
    'Content-Type':  'application/x-www-form-urlencoded
    
这个传递方式表示,模拟HTML表单提交数据
关于formata 还需要说明的是:如果报错to_bytes must receive a unicode, str or bytes object, got int
    那就检查是不是字典里出现了整型数字,字典里所有类型的数据都应该转换成string类型

如果上面拿不到数据,这样来改

 yield scrapy.FormRequest(
 		url, 
 		method='POST', 
 		body=json.dumps(payload),
 	 	headers={'Content-Type':'application/json'}
 	 	callback=self.parse)
 	 	
但这是发送header为 
 'Content-Type': "application/json"
 
 实际上,现在越来越多的人把application/json 这个 Content-Type 作为请求头,
 用来告诉服务端消息主体是序列化后的 JSON字符串。
 由于 JSON规范的流行,除了低版本 IE之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON的函数,使用 JSON不会遇上什么麻烦。

当然改成这样也可以

my_data = {'field1': 'value1', 'field2': 'value2'}
request = scrapy.Request( url, method='POST', 
             body=json.dumps(my_data), 
             headers={'Content-Type':'application/json'} )
 这个跟上面没什么区别

但是我翻看了一下,规律好像也不都这样,如果都不行,尝试交换 Content-Type 和 formata/body 的匹配关系,我就看到有这样的提交

'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
 
 my_data = {'field1': 'value1', 'field2': 'value2'}
 
 yield scrapy.Request(
 	url,
 	method='POST',
 	body=json.dumps(my_data),
  	headers=self.headers, dont_filter=True)
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值