Scrapy FormRequest发送JSON

时间:2012-06-28 00:36:47

标签: python json scrapy

我正在尝试创建一个可以发送content-type:application / json。

的FormRequest

以下是我的尝试:

yield FormRequest("abc.someurl.com", formdata=json.dumps({"referenceId":123,"referenceType":456}), headers={'content-type':'application/json'}, callback=self.parseResult2)

如果我使用json.dumps()处理formdata =中的表单数据,我得到的错误是

  

“exceptions.ValueError:需要多于1个值来解包”

我不能只使用

中的列表
formdata={"referenceId":123,"referenceType":456} 

FormRequest有效,但服务器不接受。

import requests
import json
result = requests.post(url, json.dumps({"referenceId":123,"referenceType":456}), headers={'content-type':'application/json'})

它可以从python命令提示符开始,如上所述。

有什么想法吗?

-KM

3 个答案:

答案 0 :(得分:18)

FormRequest用于模拟HTML表单(例如application / x-www-form-urlencoded)。听起来你只是想用你的请求发布数据。既然你提到了'application / json'的内容类型,你可能想要做这样的事情:

request = Request( url, method='POST', 
                   body=json.dumps(my_data), 
                   headers={'Content-Type':'application/json'} )

答案 1 :(得分:3)

from scrapy.http import JsonRequest

class TestSpider(scrapy.Spider):
    def start_requests(self):
        data = {
            'name1': 'value1',
            'name2': 'value2',
        }
        yield JsonRequest(url='http://www.example.com/post/action', data=data)

查看更多:docs.scrapy.org#jsonrequest

答案 2 :(得分:0)

您可以使用以下代码段获取响应:

  
    

res = requests.post(URL,json = data)     打印(res.text)