scrapy post 怎么发送 json 数据

2019-02-11 15:11:03 +08:00
 mapnaqi

需要带的数据为 data = {"a": [{"b": 'c'}]} 我用的这种写法一直不对, return scrapy.FormRequest( body=json.dumps(data), )

3138 次点击
所在节点    Python
12 条回复
butterfly1211
2019-02-11 15:14:52 +08:00
不需要 json.loads 直接传字典试试
mapnaqi
2019-02-11 15:19:50 +08:00
试过, 不行, formdata 传字典, 或者 body 传 json 都是 状态码 408 的错误
butterfly1211
2019-02-11 15:22:11 +08:00
可以试着传一下抓包 body 的截图,如果是"?1=2&3=4"这种的话需要可能需要换个思路
mapnaqi
2019-02-11 15:25:50 +08:00
@butterfly1211 数据长这个样子, b 是一个编码, 是数字和英文的
data = {"lineItems": [{"catalogNumber": b}]}
用 requests 写没问题, 用了 scrapy 就是 408,
butterfly1211
2019-02-11 15:30:09 +08:00
试一下,request = scrapy.Request( url, method='POST',
body=json.dumps(my_data),)方式
airect
2019-02-11 15:33:27 +08:00
body 里是 json 字符串,headers 中加 Content-Type: application/json
mapnaqi
2019-02-11 15:38:33 +08:00
@butterfly1211 还是不行
mapnaqi
2019-02-11 15:39:09 +08:00
408 Request Time-out
butterfly1211
2019-02-11 15:46:14 +08:00
FormRequest 中 {‘ key': ‘ value', ‘ k': ‘ v'}会被转化为'key=value&k=v' 并且默认的 method 是 POST,你可以再看一下 body 的原始格式,看是这种 key-value 的形式还是 json 格式在作分析
cz5424
2019-02-12 09:04:58 +08:00
@mapnaqi 这个提示并不是请求格式的问题吧,自己抓自己包看看
encro
2019-02-12 12:31:51 +08:00
抓包,或者写一个测试用例接受请求过来的 body 和 head,比较有什么不同,实在不行用 request 替代好了。最新的 request-html 已经自带 html 解析,满足大部分爬虫场景。
luoleng
2019-02-15 00:26:12 +08:00
formdata=data

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/533939

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX