使用 python requests 模块登录网站

2024-06-23

我正在尝试使用 python 请求模块登录网页。我在使用 chrome 提交登录表单并重新检查该表单的代码时捕获了发布请求。 (下面的代码片段中提到了网站以及参数)

根据某人的帖子,我能够创建一个尝试登录和访问受保护内容的 python 代码片段,但由于某种原因,这无法按预期工作。

这是我的 python 片段:

import requests

LOGIN = 'https://www.hackthis.co.uk/index.php'
PROTECTED_PAGE = 'https://www.hackthis.co.uk/news'
payload = {
    'username': 'VALIDUSERNAME',
    'password': 'VALIDPASSWORD'
}

with requests.session() as s:
    s.post(LOGIN, data=payload)
    response = s.get(PROTECTED_PAGE)
    print(response.text)

即使我发送带有所需负载的发布请求,我也无法访问受保护的内容。 响应 HTML 代码包含登录表单以及一条注释,表明我不允许在未登录的情况下访问该内容。

我在这里想念什么?

Edit:

感谢您提供非常有帮助的答案!犯了相当愚蠢的错误。我忘记了 URL 的 ?login 部分。 以下是有关该主题的后续问题的工作代码片段(经过测试,按预期工作):

import requests

    LOGIN = 'https://www.hackthis.co.uk/index.php?login'
    PROTECTED_PAGE = 'https://www.hackthis.co.uk/news'
    payload = {
        'username': 'VALIDUSERNAME',
        'password': 'VALIDPASSWORD'
    }

    with requests.session() as s:
        s.post(LOGIN, data=payload)
        response = s.get(PROTECTED_PAGE)
        print(response.text)

关于 Web 身份验证

大多数网站都使用身份验证机制,以便只有提供有效凭据的用户才能访问他们想要的内容。为了更简单地想象您想要进入博物馆。你可以进入售票亭,不会有人向你索要任何东西,但你需要有票才能看到里面。考虑到这一点,您可以将网站/服务器视为售票亭,将凭证视为购买门票的资金,并且应该使用门票本身来进入博物馆的不同部分。为了让这个例子回到 Web 服务,我将尝试解释两种用于身份验证的技术

Cookie 认证

Cookies https://en.wikipedia.org/wiki/HTTP_cookie是网站发送的小块(通常是加密的)数据,并在您浏览时存储到您的计算机上。 cookie认证流程如下:

  1. 用户将其凭据发送到网络服务器(例如用户名/密码)
  2. Web 服务器验证这些凭据,然后创建并存储具有特定标识符 (sessionID) 的会话
  3. Web 服务器使用该 sessionID 在用户的浏览器上放置一个 cookie
  4. 用户对网站受保护部分发出的任何后续请求,服务器都会检查 cookie 中的 sessionID,如果有效,则返回私人信息
  5. 一旦用户注销,会话将被销毁,任何使用此会话ID的请求都将无效

虽然这项技术很棒,但也有一些不足安全问题 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

令牌认证

该技术类似于 cookies,但它更好地模拟了我们的博物馆门票示例。令牌是包含私人信息的加密数据。值得注意的是,代币通常有一个到期日。认证流程如下:

  1. 用户将其凭据发送到网络服务器(例如用户名/密码)
  2. Web 服务器验证这些凭据,然后创建包含有关用户信息的令牌。在我的应用程序中,我通常包含存储在数据库中的用户 ID。请注意,服务器不必存储令牌。
  3. Web 服务器将令牌返回给用户
  4. 用户发出的任何后续请求都应包含令牌
  5. 一旦用户注销,令牌就应该从浏览器中销毁。需要注意的是,当用户注销并且退出时,服务器不必执行任何操作令牌在到期日期之前一直有效.

使用Postman或Curl等HTTP请求工具,可以看到该网站使用了cookie技术,登录URL为登录.

TL;DR

您的代码应该可以正常工作,唯一的问题是您用于登录的 URL。

import requests

LOGIN = 'https://www.hackthis.co.uk/index.php?login'
PROTECTED_PAGE = 'https://www.hackthis.co.uk/news'
payload = {
    'username': 'VALIDUSERNAME',
    'password': 'VALIDPASSWORD'
}

with requests.session() as s:
    s.post(LOGIN, data=payload)
    response = s.get(PROTECTED_PAGE)
    print(response.text)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python requests 模块登录网站 的相关文章

  • 在 Python 3 中使用 Socket 时出现 400 Bad Request 错误

    我刚刚开始使用 Python 3 6 1 中的 Python Web 数据 我正在学习套接字 我的代码有一个问题 我无法弄清楚 我的代码中的网站工作正常 但是当我运行此代码时 我收到 400 Bad Request 错误 我不太确定我的代码
  • 从'_io.BytesIO'转换为python3.6中的类似字节的对象?

    我使用此函数来解压缩 HTTP 响应的正文 如果它是使用 gzip compress 或 deflate 压缩的 def uncompress body self compression type body if compression t
  • ssl.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:777)

    我目前正在使用 websocket client 将 python 与 QlikSense 服务器连接 对于身份验证 我使用了 Qlik sense 服务器生成的证书 即使我遵循这里提到的相同代码逻辑link https help qlik
  • 将黑白图像完全转换为一组线条(也称为仅使用线条进行矢量化)

    我有许多黑白图像 想将它们转换为一组线条 这样我就可以完全或至少接近完全地从线条重建原始图像 换句话说 我试图将图像矢量化为一组线条 我已经看过了霍夫线变换 https docs opencv org2 4 modules imgproc
  • 调用 close() 后大文件没有立即刷新到磁盘?

    我正在使用 python 脚本创建大文件 超过1GB 实际上有 8 个 在创建它们之后 我必须创建将使用这些文件的进程 该脚本如下所示 This is more complex function but it basically does
  • \ufeff 标识符中的无效字符

    我有以下代码 import urllib request try url https www google com search q test headers usag Mozilla 5 0 Macintosh Intel Mac OS
  • 导入错误:无法导入名称 DependencyWarning

    我正在使用 python 2 7 12 当我做import requests 我看到下面的错误 尝试卸载和安装 requests 也升级 pip 但没有运气 仍然是同样的问题 Python 2 7 12 default Nov 19 201
  • 创建将一把小提琴按色调分割的小提琴图的正确方法是什么?

    创建将一把小提琴分开的小提琴图的正确方法是什么hue 我尝试了不同的方法 似乎唯一的方法是创建一个为数据集中的每个条目共享相同值的功能 并将该功能的名称传递为x fig plt figure figsize 20 8 fig add sub
  • Pandas 如何删除包含所需字符串的行

    我想删除包含所需字符串的所有行 假设我有以下数据框 A B C 1 a x w g n 3 l p j p v 我想删除包含字符串的所有行p 我已经搜索过它 但大多数答案都是基于列名称 就我而言 我不会知道它可以出现在任何列中 输出数据帧应
  • PyTorch:加速数据加载

    我正在使用 dendnet121 从 Kaggle 数据集进行猫 狗检测 我启用了cuda 看起来训练速度非常快 然而 数据加载 或者可能是处理 似乎非常慢 有一些方法可以加快速度吗 我尝试玩女巫批量大小 但没有提供太多帮助 我还将 num
  • pandas to_sql sqlalchemy 与 secure_transport 的连接

    我正在尝试将数据发送到具有 require secure transport ON 的服务器上的 mysql 数据库 当我尝试使用以下代码连接到它时 import pandas as pd import pymysql from sqlal
  • 根据给定列表中的值替换列中的值[重复]

    这个问题在这里已经有答案了 我在数据框中有一列 仅允许定义列表中存在的值 例如 给定列表 l1 1 2 5 6 如果列表中不存在列中的值 我需要将每个值替换为 0 column Expected column 1 1 5 5 2 2 3 0
  • psycopg 错误,列不存在

    我不断收到这个 错误 psycopg2 ProgrammingError 列 someentry 不存在 该错误表明该列someentry不存在时someentry不是列 它只是要输入数据库的值 这是给出错误的代码 cur execute
  • 如何解决错误:psycopg2 构建轮失败?

    我遇到问题了psycopg2 的构建轮子 thru pip install r requirements txt 我使用的是 ubuntu 20 04 python 3 8 5 venv 这是我的要求 txt amqp 2 6 1 anyj
  • 在空心方形层内生成随机均匀分布点的 Pythonic 方法

    假设我们有一个尺寸为 n 的空心方形薄片 也就是说 我们有一个 nxn 正方形 其中删除了 k l 矩形 1 我为 numpy 编写了这段代码 但它至少有 2 个问题 我必须丢弃大约 1 9 的所有生成点 并且删除 numpy array
  • 验证 PyPI Python 包的完整性

    最近有一些消息传出恶意库已上传到 Python Package Index PyPI 请参阅 PyPI 上的恶意库 https www bleepingcomputer com news security ten malicious lib
  • 嵌套序列化器中的上下文 Django Rest Framework

    如果我有一个嵌套序列化器 class ChildSerializer ModelSerializer class Meta fields c name model Child class ParentSerializer ModelSeri
  • python 3.6 selenium webdriver错误X显示需要发送密钥无法使用Xvfb

    我正在使用 selenium webdriver Chrome 为我的测试环境创建具有特定功能的网络驱动程序 class MyDriver webdriver Chrome def init self executable path chr
  • 抓取 Shopee API v4

    我有一个最终项目 其中我想要检索的数据是通过在shopee上抓取数据来获取的 但是当我在隐藏的API上抓取shopee时遇到问题 当我在Insomnia脚本上尝试时 脚本会运行 但是当我尝试时在本地或 google colab 脚本上 这是
  • print() 函数的有趣/奇怪的机制

    我正在学习Python 我目前正在学习如何定义自己的函数 并且在尝试理解返回值和打印它之间的区别时遇到了一些困难 我读到的关于这个主题的描述对我来说不太清楚 所以我开始自己尝试 我想我现在已经明白了 如果我没记错的话 区别在于你可以传递 a

随机推荐