如何在Python中检查POST要求

g0m3z

我正在尝试通过从网页中抓取数据来使用Python自动生成报告。该站点使用我需要通过的身份验证。

我使用以下代码登录并尝试下载报告页面,但看来我做错了。身份验证通过HTTP状态代码200,但身份验证之后,该站点立即显示“在处理请求时遇到错误。请查看日志以获取更多详细信息。” 我猜它是指服务器日志,但我不是服务器的所有者,所以我无法检查。

我认为我在登录期间未在POST请求中传递任何内容,因此我收到了此消息。

有没有可以用来跟踪GET / POST流量和需求的工具?我要抓取的网站相当老,是用.NET编写的,并且与Chrome不兼容,因此我无法使用Chrome的开发者工具。

这是我的代码:

import requests                                                                                                                                                                                                                                                                                            

USERNAME = 'myuser'                                                                                                                                                                                                                                                             
PASSWORD = 'mypw'                                                                                                                                                                                                                                                          
DOMAIN = 'domain comes here'                                                                                                                                                                                                                                                                                             

LOGINURL = 'https://reportsite.com/login'                                                            
DATAURL = 'https://reportsite.com/data'                                                                                                                                                                                                        

session = requests.session()                                                                                                                                                                                                                                                                               

req_headers = {                                                                                                                                                                                                                                                                                            
    'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',                                                                                                                                                                                                               
    'Accept-Encoding' : 'gzip, deflate',                                                                                                                                                                                                                                                                   
    'Accept-Language' : 'en-US,en;q=0.8',                                                                                                                                                                                                                                                                  
    'Cache-Control' : 'max-age=0',                                                                                                                                                                                                                                                                         
    'Connection' : 'keep-alive',                                                                                                                                                                                                                                                                           
    'Content-Length' : '573',                                                                                                                                                                                                                                                                              
    'Content-Type' : 'application/x-www-form-urlencoded',                                                                                                                                                                                                                                                  
    'Cookie' : 'ASP.NET_SessionId=u03xo1ypcphzfo523c0lc5ok',                                                                                                                                                                                                                                               
    'Host' : 'myhost.net',                                                                                                                                                                                                                                                                
    'Origin' : 'https://myhost.net',                                                                                                                                                                                                                                                      
    'Referer' : 'https://myhost.net/WAS/Login.aspx?ReturnUrl=%2fWAS%2fAWEMain.aspx%3flog%3dsaved%26xcapp%3dsplash%26xcsid%3dVISTA&log=saved&xcapp=splash&xcsid=VISTA',                                                                                                                    
    'User-agent': 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)'                                                                                                                                                             
}                                                                                                                                                                                                                                                                                                          

formdata = {                                                                                                                                                                                                                                                                                               
    '__VIEWSTATE' : '/wEPDwUJNzM1NjMxNzAxD2QWAgIBD2QWAgIDDxBkDxYGZgIBAgICAwIEAgUWBhAFBEFQQUMFBEFQQUNnEAUDQVVTBQNBVVNnEAUDRVVSBQNFVVJnEAUDSlBOBQNKUE5nEAUDTEFDBQNMQUNnEAUDTkFNBQNOQU1nZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFDEltYWdlQnV0dG9uMQ7nE6wwQ2IuIJZCRML2VTku00DrmD2fT7YsZ+JtwEKT',    
    '__VIEWSTATEGENERATOR' : '999CB518',                                                                                                                                                                                                                                                                   
    '__EVENTVALIDATION' :' /wEWCgLvhYTaCwLL/4HeAgLSwpnTCALSxeCRDwKmhfK5BQKoxMzXBAKJv+mgAQLYyZC+BwLdu76IAgK5oPGLAXlSoU7X+UsNQS7lILVvRCWX/xKRtPK1u2cI/XJCVBMI',                                                                                                                                              
    'Userid': USERNAME,                                                                                                                                                                                                                                                                                    
    'ImageButton1.x' :28,                                                                                                                                                                                                                                                                                  
    'ImageButton1.y' :7,                                                                                                                                                                                                                                                                                   
    'Password': PASSWORD,                                                                                                                                                                                                                                                                                  
    'Domain' : DOMAIN,                                                                                                                                                                                                                                                                                     
    'WANT_NEW_USER' : ''                                                                                                                                                                                                                                                                                   
}                                                                                                                                                                                                                                                                                                          

# Authenticate                                                                                                                                                                                                                                                                                             
r = session.post(LOGINURL, data=formdata, headers=req_headers, allow_redirects=False)                                                                                                                                                                                                                      
print "___________LOGIN____________"                                                                                                                                                                                                                                                                       
print r.headers                                                                                                                                                                                                                                                                                            
print r.status_code                                                                                                                                                                                                                                                                                        
print r.text                                                                                                                                                                                                                                                                                               

# Read data                                                                                                                                                                                                                                                                                                
r2 = session.get(DATAURL)                                                                                                                                                                                                                                                                                  
print "___________DATA____________"                                                                                                                                                                                                                                                                        
print r2.headers                                                                                                                                                                                                                                                                                           
print r2.status_code                                                                                                                                                                                                                                                                                       
print r2.text                                                                                                                                                                                                                                                                                              
g0m3z

我找出了问题所在。不幸的是,我的选择非常有限,我无法在公司的笔记本电脑上安装任何东西。如果我拥有笔记本电脑的管理员权限,那么我肯定会安装一个嗅探器,以查看后台发生了什么。

我手动检查了登录页面的来源,并逐个逐一处理了在POST请求中传递的内容。原来,存在一个必须通过的隐藏字段,而我的脚本没有发送它。在将隐藏字段添加到POST请求后,一切进行得很顺利。

我建议任何人尝试手动将POST请求的URL放在一起(例如:www.site.com/login.aspx?userid=myid&csid=233等),然后在浏览器中检查响应。这有助于我弄清楚从哪里开始调查此问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在python中没有regex的情况下检查字符串的要求?

来自分类Dev

如何在python中实时检查连接?

来自分类Dev

如何在Python中检查输入的整数?

来自分类Dev

如何在Python中检查无输入

来自分类Dev

如何在Python中检查函数类型?

来自分类Dev

如何在python中迭代条件检查?

来自分类Dev

如何在Nginx中检查POST正文(HttpLuaModule)

来自分类Dev

如何在PHP中检查不完整的POST请求

来自分类Dev

如何在java中检查POST端点/url的状态

来自分类Dev

如何在Python安装脚本中要求importlib.resources

来自分类Dev

如何在 installshield 中的软件之前检查和安装另一个软件要求?

来自分类Dev

如何在python中检查点是否在椭圆中

来自分类Dev

如何在Python中检查函数装饰器

来自分类Dev

如何在Python中检查其他条件

来自分类Dev

如何在python中检查变量是否为enum类型

来自分类Dev

如何在Python中检查Shell命令是否结束

来自分类Dev

如何在python脚本中检查系统是否为FreeBSD?

来自分类Dev

如何在python 3.x中禁用ssl检查?

来自分类Dev

如何在python shell中检查matplotlib的默认字体?

来自分类Dev

如何在python上的csv文件中检查频率?

来自分类Dev

如何在Python中检查type()方法的返回值?

来自分类Dev

如何在IF语句python中检查日期时间格式

来自分类Dev

如何在Python中检查输入是否为数字?

来自分类Dev

如何在python中检查上传的文件是csv还是xls?

来自分类Dev

如何在python中检查变量是否为enum类型

来自分类Dev

如何在Python中检查整个列表以实现条件

来自分类Dev

如何在 python 3 中检查输入答案

来自分类Dev

如何在python中检查日期字符串的日期?

来自分类Dev

如何在python中检查网站内容类型

Related 相关文章

  1. 1

    如何在python中没有regex的情况下检查字符串的要求?

  2. 2

    如何在python中实时检查连接?

  3. 3

    如何在Python中检查输入的整数?

  4. 4

    如何在Python中检查无输入

  5. 5

    如何在Python中检查函数类型?

  6. 6

    如何在python中迭代条件检查?

  7. 7

    如何在Nginx中检查POST正文(HttpLuaModule)

  8. 8

    如何在PHP中检查不完整的POST请求

  9. 9

    如何在java中检查POST端点/url的状态

  10. 10

    如何在Python安装脚本中要求importlib.resources

  11. 11

    如何在 installshield 中的软件之前检查和安装另一个软件要求?

  12. 12

    如何在python中检查点是否在椭圆中

  13. 13

    如何在Python中检查函数装饰器

  14. 14

    如何在Python中检查其他条件

  15. 15

    如何在python中检查变量是否为enum类型

  16. 16

    如何在Python中检查Shell命令是否结束

  17. 17

    如何在python脚本中检查系统是否为FreeBSD?

  18. 18

    如何在python 3.x中禁用ssl检查?

  19. 19

    如何在python shell中检查matplotlib的默认字体?

  20. 20

    如何在python上的csv文件中检查频率?

  21. 21

    如何在Python中检查type()方法的返回值?

  22. 22

    如何在IF语句python中检查日期时间格式

  23. 23

    如何在Python中检查输入是否为数字?

  24. 24

    如何在python中检查上传的文件是csv还是xls?

  25. 25

    如何在python中检查变量是否为enum类型

  26. 26

    如何在Python中检查整个列表以实现条件

  27. 27

    如何在 python 3 中检查输入答案

  28. 28

    如何在python中检查日期字符串的日期?

  29. 29

    如何在python中检查网站内容类型

热门标签

归档