Python 使用Scrapy请求获取403错误

Python 使用Scrapy请求获取403错误,python,request,scrapy,Python,Request,Scrapy,当我对以下HTTP请求使用Python请求模块时,它会返回一个我所需要的dict: import requests payload = {'x-algolia-application-id':'Q0TMLOPF1J','x-algolia-api-key':'30a0c84a152d179ea8aa1a7a59374d08', 'hitsPerPage':'40', 'numericFilters': ['startdate > 1511095966851'],'facets': '*'

当我对以下HTTP请求使用Python请求模块时,它会返回一个我所需要的dict:

import requests

payload = {'x-algolia-application-id':'Q0TMLOPF1J','x-algolia-api-key':'30a0c84a152d179ea8aa1a7a59374d08', 'hitsPerPage':'40', 'numericFilters': ['startdate > 1511095966851'],'facets': '*' }  

url = 'https://q0tmlopf1j-3.algolianet.com/1/indexes/sitecore-events'

r = requests.get(url, params=payload).json()
但是,当我尝试将其实现为一个scrapy请求,以便分析结果时:

def start_requests(self):
    payload = {'x-algolia-application-id':'Q0TMLOPF1J','x-algolia-api-key':'30a0c84a152d179ea8aa1a7a59374d08', 'hitsPerPage':'40', 'numericFilters': ['startdate > 1511095966851'],'facets': '*' }  

    url = 'https://q0tmlopf1j-3.algolianet.com/1/indexes/sitecore-events'

    yield scrapy.Request(url,
                                   body=json.dumps(payload), 
                                   method='GET',
                                   callback=self.parse_item)

def parse_item(self,response):
    # I want to parse the dict here
我得到一个403错误。我知道我做错了一些简单的事情,这是什么?

我知道您通过省略参数“解决”了问题,但正确的方法是使用


是的,我试过这个。它仍然给出了一个403。特别是:站点API返回一个错误,即API密钥或应用程序ID无效,但事实并非如此,因为相同的凭据使用请求工作。在编码后通过打印检查url这带来了一个有趣的发现:dict元素“'numericFilters':['startdate>1511095966851']”Scrapy没有正确地将其转换为URL,这就是问题所在。请求将其全部剥离。我从Scrapy请求中手动删除了它,因为它是一个不重要的过滤器,并且可以正常工作。您的意思是这可以正确地解析省略的参数吗?它没有;它仍然返回403错误。不过,没有它也行,对我来说非常好。我得到的响应与请求相同。
yield scrapy.FormRequest(
    url=url,
    method='GET',
    formdata=payload,
    callback=self.parse_item
)