12

我正在尝试创建一个可以发送 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 命令提示符下工作。

有任何想法吗?

-公里

4

3 回答 3

23

FormRequest 用于模拟 HTML 表单(例如 application/x-www-form-urlencoded)。听起来你只是想用你的请求发布数据。由于您提到了“应用程序/json”的内容类型,您可能想要执行以下操作:

request = Request( url, method='POST', 
                   body=json.dumps(my_data), 
                   headers={'Content-Type':'application/json'} )
于 2012-07-11T00:42:28.910 回答
5
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

于 2020-07-02T04:18:13.757 回答
-1

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

res =requests.post(url, json=data) print(res.text)

于 2019-01-02T06:21:04.893 回答