响应403尝试使用Python请求登录网站时出错



我正试图从该网站提取数据,但在运行session.post时收到了一个Response 403错误。请参阅下面的代码以供参考。如有任何帮助,我们将不胜感激。

import requests
from bs4 import BeautifulSoup
import re
username = 'username'
password = 'password'
scrape_url = 'https://app.mapro.us/en/manage/owners/houses'
login_url = 'https://app.mapro.us/en/login'
login_info = {'login': username, 'pwd': password}
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive'
}
#Start session.
session = requests.session()
#Login using your authentication information.
p = session.post(url=login_url, data=login_info, headers=headers)
print(p)

我没有用正确的loginpassword测试的帐户,但当我在浏览器中检查它时(在Firefox/Chrome选项卡Network中的DevTools中(

主要区别在于:

  • 它将POST发送到地址https://app.mapro.us/ajax?login=

如果我使用此链接,那么我会得到带有JSON数据的200

{
"status": 0,
"msg": "Authorization denied."
}

也许如果我有账户,它会给出不同的信息。


其他差异可能很重要,也可能不是

  • 它将POST作为AJAX发送,因此它具有头

    X-Requested-With': 'XMLHttpRequest
    
  • 它期望JSON的响应,因此它具有不同的报头Accept

    'Accept': 'application/json, text/javascript, */*; q=0.01'
    
  • 它发送带有cookieSIDPOST,它在以前的GET中获得了该cookie-因此您可能需要在POST之前运行session.get('https://app.mapro.us/en/login', ....)

BTW:浏览器中的这个GET总是得到403,所以它似乎并不重要。


import requests
session = requests.session()
# --- GET ---
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive',
}
url_get = 'https://app.mapro.us/en/login'
p = session.get(url_get, headers=headers)
print(p)
#print(p.text)
print('Cookies SID:', session.cookies.get('SID'))
# --- POST ---
username = 'username'
password = 'password'
login_info = {'login': username, 'pwd': password}
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'application/json, text/javascript, */*; q=0.01',  # expect JSON 
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'en-US,en;q=0.9',
'Connection': 'keep-alive',
'X-Requested-With': 'XMLHttpRequest',  # send AJAX
}
url_post = 'https://app.mapro.us/ajax?login='
p = session.post(url_post, headers=headers, data=login_info)
print(p)
print(p.text)

最新更新