Python中的会话超时

2024-06-01 00:38:16 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我正在使用的代码。

import requests

headers = { 'Accept':'*/*',
            'Accept-Language':'en-US,en;q=0.8',
            'Cookie':'Cookie:PHPSESSID=vev1ekv3grqhh37e8leu1coob1',
            'Cache-Control':'max-age=0',
            'Connection':'keep-alive',
            'Proxy-Authorization':'Basic ZWRjZ3Vlc3Q6ZWRjZ3Vlc3Q=',
            'If-Modified-Since':'Fri, 13 Nov 2015 17:47:23 GMT',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'
            }


with requests.Session() as c:
    url = 'http://172.31.13.135/tpo/spp/'
    c.get(url, headers=headers)
    payload = {'regno': 'myregno', 'password': 'mypassword'}
    c.post(url, data = payload, headers=headers)
    r = c.get('http://172.31.13.135/tpo/spp/home.php', headers=headers)
    print r.content

我运行此脚本时收到以下消息。

<script>
alert("Session timeout !");
window.location = "logout.php";
</script><script>
alert("Unauthorised Access!");
window.location = "index.php";
</script>

<!DOCTYPE html>
<html lang="en">

如何处理这个“会话超时”问题?

多谢提前。


Tags: httpurlgetcookiesessionscriptalertrequests
2条回答

当我不能访问网站去刮的时候,我真的很难回答。 所以我猜

1)尝试从邮件头中删除不需要的cookie。 因为requests.Session()将在您第一次访问url = 'http://172.31.13.135/tpo/spp/'时生成自己的cookie。

So your headers will be,

headers = { 'Accept':'*/*',
            'Accept-Language':'en-US,en;q=0.8',
            'Cache-Control':'max-age=0',
            'Connection':'keep-alive',
            'Proxy-Authorization':'Basic ZWRjZ3Vlc3Q6ZWRjZ3Vlc3Q=',
            'If-Modified-Since':'Fri, 13 Nov 2015 17:47:23 GMT',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'
            }

2)确保header中的'If-Modified-Since'字段对您提到的内容是静态的,并且不会发生更改。如果它确实发生了变化,请相应地对其进行编码,以便实时设置日期和时间。

3)我不知道你为什么在标题中有'Proxy-Authorization':'Basic ZWRjZ3Vlc3Q6ZWRjZ3Vlc3Q='。试试没有它的标题。 但是,如果您必须拥有它,那么请确保此身份验证代码也是静态的,并且不会每次都更改。

如果有帮助请告诉我

您也可以在get和post方法中传递timeout变量:

timeout = 10  # ten sec.
with requests.Session() as c:
    url = 'http://172.31.13.135/tpo/spp/'
    c.get(url, headers=headers, timeout=timeout)
    payload = {'regno': 'myregno', 'password': 'mypassword'}
    c.post(url, data = payload, headers=headers, timeout=timeout)
    r = c.get('http://172.31.13.135/tpo/spp/home.php', headers=headers, timeout=timeout)
    print r.content

这样做可以调整等待响应的最长时间 有关请求的详细信息,请参见the docs

相关问题 更多 >