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