即使在标头和数据属性已通过Python3正确传递的情况下,在AJAX请求后进行重定向

时间:2019-03-17 18:36:01

标签: ajax redirect web-scraping python-requests

在一个政府站点上,我设法通过凭据(在login_data中指定为python字典)登录,如下所示:

with requests.Session() as s:
    url = 'https:......../login'
    r = s.get(url, data=login_data, headers=headers, verify=False)
    r = s.post(url, data=login_data, headers = headers, verify=False)
    print(r.content)

显示html:

b'<!DOCTYPE html.....,如果我搜索我的用户名,则会发现<span class="rich-messages-label msg-def-inf-label">Welcome, USER..XYZ!<,从中我可以成功登录。

下一步,我要进入我现在登录的站点的搜索子站点url = 'https:......./search)。此子站点使我可以在给定日期(incident-IDstart_date)上搜索政府记录以查找事件(end_date)。

由于登录成功,我尝试了以下操作:

with requests.Session() as s:
    url = 'https:......../search'
    r = s.get(url, data=search_data, headers=headers, verify=False)
    r = s.post(url, data=search_data, headers = headers, verify=False)
    print(r.content) 

我预先使用 Google Chrome Inspecor Network Header 定义了search_data:

search_data:{
    'AJAXREQUEST': '_viewRoot',
    'theSearchForm': 'theSearchForm',
    'incident-ID' : '12345',
    'start_date' : '05/03/2019 00:00:00 +01:00',
    'end_date' : '05/03/2019 23:59:59 +01:00',
}

并且我指定了标头,以包括不仅仅是代理:

 headers = { 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
    'Connection': 'keep-alive',
    'Cookie': 'JSESSIONID=8351xxxxxxxxxxxxFD5; _ga=GA1.2.xxxxxxx.xxxxxxxx',
    'Host': 'somehost...xyz.eu',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
}

到目前为止,设置应该不错,不是吗?但是我遇到了一个问题,因为print(r.content)并没有像登录后那样给我.html,而是一些令人失望的简短内容:b'<?xml version="1.0" encoding="UTF-8"?>\n<html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="Ajax-Response" content="redirect" /><meta name="Location" content="home.seam?cid=3774801" /></head></html>

这很可惜,因为我可以在inspctor中看到浏览器中对后请求的响应会产生我正在寻找的确切数据。类似地,第一个请求后产生的数据与我的python命令r = s.post(url, data=login_data, headers = headers, verify=False)完全相同。但是已经说过的print(r.content)似乎是重定向,只能将我带回到登录站点,说明您已经登录

总结:

  • 第一个request.Session.get-.post有效(我得到的响应HTML与Google Chrome Inspector中的相同)。
  • 第二个request.Session.post不起作用,因为它会产生一些奇怪的重定向(但是我得到了 在Google Chrome浏览器检查器中正确的响应)。

我想念什么???请帮忙! :S

0 个答案:

没有答案