首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python请求登录到网站时,响应403错误

使用Python请求登录到网站时,响应403错误
EN

Stack Overflow用户
提问于 2022-02-27 21:39:48
回答 1查看 201关注 0票数 0

我试图从这个网站中提取数据,但是我在运行session.post时得到了一个403号错误的响应。请参阅下面的代码以供参考。任何帮助都将不胜感激。

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-27 22:17:40

我没有用正确的loginpassword进行测试的帐户,但是在浏览器中检查它时有一些不同(在Firefox中的DevTools /在标签Network中的Chrome中)

主要区别是:

https://app.mapro.us/ajax?login=

  • 它将POST发送给地址

如果我使用这个链接,那么我就可以得到200JSON数据。

代码语言:javascript
运行
复制
{
    "status": 0,
    "msg": "Authorization denied."
}

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

还有其他的差异,可能是重要的或不重要的。

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

X请求-With‘:'XMLHttpRequest

  • 它希望得到JSON的响应,所以它有不同的标题Accept

“‘Accept”:'application/json,text/javascript,*/*;q=0.01'

POST

  • ,它向POST发送cookie SID,这是在以前的GET中获得的,因此您可能需要在session.get('https://app.mapro.us/en/login', ....)之前运行session.get('https://app.mapro.us/en/login', ....)

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

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71288666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档