Python HTTP 请求被阻止

Python HTTP Request gets blocked

我一直试图通过一个请求,其中第一页是传递给主页的数学演算。这部分解决了。然而,当我尝试获得其他东西时,我得到以下信息:

<script>
window.location.reload();
</script>

这个方法学了一段时间,现在才第一次尝试:

import re
import requests


def login_tokyo(s):
    r = s.get('https://apcis.tmou.org/public/')
    str_number = re.findall("<span[^>]+(.*?)</span>", r.text)[0]
    numbers = re.findall('[0-9]+', str_number)
    captcha = int(numbers[0]) + int(numbers[1])
    payload = {'captcha': captcha}
    r = s.post('https://apcis.tmou.org/public/?action=login', data=payload)
    check_text = re.findall('<b>(.*?)</b>', r.text)[0]
    print(check_text)
    payload1 = {'Param': 0, 'Value': 5797164, 'imo': '', 'callsign': '', 'name': '', 'compimo': 5797164,
                'compname': '', 'From': '01.06.2020', 'Till': '31.08.2020', 'authority': 0, 'flag': 0, 'class': 0,
                'ro': 0, 'type': 0, 'result': 0, 'insptype': -1, 'sort1': 0, 'sort2': 'DESC', 'sort3': 0,
                'sort4': 'DESC'
                }
    r = s.post('https://apcis.tmou.org/public/?action=getcompanies', data=payload1)
    perf_tm = re.findall("<p class=[^>]+(.*?)</p>", r.text)
    print(r.text)
    print(perf_tm)

if __name__ == '__main__':
    with requests.Session() as s:
        login_tokyo(s)

print(check_text) 告诉我我在主页上,但是...什么也没有。根据这个具体要求,我希望 print(perf_tm) 能让我达到 Medium。 感谢所有帮助!

编辑:

没关系,我错了,会话应该处理所有 cookie,网站似乎拒绝了没有 User-Agent 的浏览器的请求,只需这样做:


def login_tokyo(s):
    header={'User-Agent':''}
    s.headers.update(header)
    r = s.get('https://apcis.tmou.org/public/')
    str_number = re.findall("<span[^>]+(.*?)</span>", r.text)[0]
    ...

原答案:

您没有处理 PHPSESSID cookie,许多网站使用它来跟踪登录服务器端,尝试这样做


def login_tokyo(s):
    header={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.','Cookies':'PHPSESSID=xxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
    s.headers.update(header)
    r = s.get('https://apcis.tmou.org/public/')
    str_number = re.findall("<span[^>]+(.*?)</span>", r.text)[0]
    ...

如果您不想手动处理 cookie,您也可以使用 cookielib (more info in this question),尽管大多数服务器不关心 sessionid 集是否已经在他们的数据库中,并且会接受任何随机 sessionid。