Python 刮屑飞溅不';t设置自定义请求头

Python 刮屑飞溅不';t设置自定义请求头,python,header,request,scrapy,splash-screen,Python,Header,Request,Scrapy,Splash Screen,我正在尝试使用Python2.7中的Scrapy+Splash来创建一个网站。 该网站使用JavaScript生成大部分HTML,这就是我需要Splash的原因 首先,我向Scrapy发出一个表单请求,要求登录到一个网站。这是成功的 然后,我从JSON响应中提取“access_token”,因为它应该在下一个请求中用作“Authorization”头,以向网站确认我已登录 jsonresp = json.loads(response.body_as_unicode()) self.token =

我正在尝试使用Python2.7中的Scrapy+Splash来创建一个网站。 该网站使用JavaScript生成大部分HTML,这就是我需要Splash的原因

首先,我向Scrapy发出一个表单请求,要求登录到一个网站。这是成功的

然后,我从JSON响应中提取“access_token”,因为它应该在下一个请求中用作“Authorization”头,以向网站确认我已登录

jsonresp = json.loads(response.body_as_unicode())
self.token = 'Bearer ' + jsonresp['access_token']
self.my_headers['Authorization'] = self.token
在继续SplashRequest之前,我决定使用scrapy.Request测试会话。我传递了cookies和新的标题:

 yield scrapy.Request('https://www.example.com/products', cookies=self.cookies, dont_filter=True, callback=self.parse_pages,  headers=self.my_headers)
result.body中的HTML确认我已登录。太好了

调用response.request.headers显示还发送了“Authorization”头

{'Accept-Language': ['en-US,en;q=0.5'], 
'Accept-Encoding': ['gzip,deflate'], 
'Accept': ['application/json, text/plain, */*'], 
'User-Agent': ['Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'], 
'Connection': ['keep-alive'], 
'Referer': ['https://www.example.com/Web'], 
'Cookie': ["___cookies___"], 
'Content-Type': ['application/x-www-form-urlencoded'], 
'Authorization': ['Bearer Zyb9c20JW0LLJCTA-GmLtEeL9A48se_AviN9xajP8NZVE8r6TddoPHC6dJnmbQ4RCddM8QVJ2v23ey-kq5f8S12uLMXlLF_WzInNI9eaI29WAcIwNK-FixBpDm4Ws3SqXdwBIXfkqYhd6gJs4BP7sNpAKc93t-A4ws9ckpTyih2cHeC8KGQmTnQXLOYch2XIyT5r9verzRMMGHEiu6kgJWK9yRL19PVqCWDjapYbtutKiTRKD1Q35EHjruBJgJD-Fg_iyMovgYkfy9XtHpAEuUvL_ascWHWvrFQqV-19p-6HQPocEuri0Vu0NsAqutfIbi420_zhD8sDFortDmacltNOw-3f6H1imdGstXE_2GQ']}
Cookie调试显示所有Cookie都已发送,没有问题

之后,我用SplashRequest替换了scrapy.Request:

yield SplashRequest('https://www.example.com/products', cookies=self.cookies,  callback=self.parse_pages, args={"lua_source": lua_script, 'headers':self.my_headers},  endpoint='execute', errback=self.errors)
lua_脚本:

lua_script = """
function main(splash)
  splash:init_cookies(splash.args.cookies)
  assert(splash:go{
    splash.args.url,
    headers=splash.args.headers,
    http_method=splash.args.http_method,
    body=splash.args.body,
  })
  assert(splash:wait(2))

  local entries = splash:history()
  local last_response = entries[#entries].response

  return {
    url = splash:url(),
    headers = last_response.headers,
    http_status = last_response.status,
    html = splash:html(),
    }
end
"""
然而,我从Splash response获得的HTML显示我没有登录

Cookie调试未显示任何问题-发送的Cookie与以前相同

但以下是我通过调用response.request.headers得到的信息:

正如您所看到的,Splash并没有设置我的自定义标题,而是将cookies和默认的cookies组合在一起

我尝试将自己的头设置为SplashRequest函数参数和lua_脚本内部,但没有一种方法奏效

我的问题是,如何在Splash中设置我自己的请求头

 {'Accept-Language': ['en'], 
'Accept-Encoding': ['gzip,deflate'], 
'Accept': ['text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'], 
'User-Agent': ['Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0'], 
'Cookie': ["___cokies___"], 
'Content-Type': ['application/json']}