scrapy发json的post请求
一 、scrapy发json的post请求:
def start_requests(self):self.headers = {'Content-Type': 'application/json'}json_data = {"productName": "", "currentPage": "1", "recordNumber": "10", "languageFlg": "0"}url = "https://xxxx"yield scrapy.Request(url=url,method="POST", body=json.dumps(json_data), callback=self.parse_page,dont_filter=True,headers=self.headers)
二、表单 和 json传参区别:
在使用 requests
库发送 HTTP 请求时,json
和 data
是两个常用的参数,用于传递不同类型的数据。
json
参数:
当你使用 json
参数时,你可以传递一个 Python 对象(通常是字典),requests
会自动将其转换为 JSON 格式,并设置请求的 Content-Type 为 application/json
。这在发送 POST 请求时很有用,特别是当你需要向服务器传递 JSON 格式的数据时。
import requestsurl = 'https://example.com/api/endpoint'
data = {'key': 'value'}response = requests.post(url, json=data)
这会将 data
转换为 JSON,并设置请求的 Content-Type 为 application/json
。
data
参数:
data
参数用于发送表单数据,通常使用在 POST 请求中。data
参数应该是一个字典,其中包含要发送的表单字段和值。requests
会将这些数据编码为表单形式,并设置请求的 Content-Type 为 application/x-www-form-urlencoded
。
import requestsurl = 'https://example.com/api/endpoint'
data = {'key': 'value'}response = requests.post(url, data=data)
这会将 data
字典编码为表单形式,并将其作为请求的正文发送。
总体来说,json
主要用于发送 JSON 格式的数据,而 data
用于发送表单数据。选择使用哪个参数取决于服务器端期望接收的数据类型。如果你要发送 JSON 数据,通常会使用 json
参数。如果你需要模拟表单提交,可以使用 data
参数。
三、Scrapy里的Request和FormRequest:
3行和4行都是json的post请求,但是最好加上(“Content-Type”: “application/json”,)请求头。
测试时,没加请求头,报错了。
请求方式 | 使用方法 | headers参数 | 参数 | 服务器端接收到参数 |
---|---|---|---|---|
get | Request | - | ?name=tom | args |
post | FormRequest | 有默认值 | formdata={“name”: “Tom”} | form |
post | Request | - | body=json.dumps({“name”: “Tom”}) | data, json |
post | Request | “Content-Type”: “application/x-www-form-urlencoded” | body=json.dumps({“name”: “Tom”}) | form |
post | Request | “Content-Type”: “application/json”, | body=json.dumps({“name”: “Tom”}) | data, json |
参考文章:
Python爬虫:Scrapy的get请求和post请求
Scrapy Requests and Responses