You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Requests访问Moodle时持续重定向问题求助

问题:Moodle登录后GET请求持续被重定向

我正在编写Python脚本,用于从Moodle课程中下载反馈文件。脚本已成功完成登录流程,但所有GET请求都会被重定向到未请求的页面(比如个人资料编辑页)。

以下是我的脚本代码:

import time
import requests
import configparser
import bs4


moodle_url = "https://moodle.uni-bielefeld.de/"


def login(session, id, password):

    def get_relay_state_saml(html):
        soup = bs4.BeautifulSoup(html, features="html.parser")
        divs = soup.findAll("div")
        divs = divs[0]
        relay_tag = divs.contents[1]
        saml_tag = divs.contents[3]
        relay_value = relay_tag['value']
        saml_value = saml_tag['value']
        return {'RelayState': str(relay_value), 'SAMLResponse': str(saml_value)}

    response = session.get('https://moodle.uni-bielefeld.de/auth/shibboleth/index.php')

    # select university
    payload_select = {
        'user_idp': 'https://shibboleth.uni-bielefeld.de/idp/shibboleth',
        'Select': 'Select'
    }
    # redirect to login page
    response_select = session.post(response.url, data=payload_select)
    # print(response_select.text)
    # login form
    payload_login = {
        'j_username': id,
        'j_password': password,
        '_eventId_proceed': ''
    }

    response_login = session.post(response_select.url, data=payload_login)
    # print(response_login.url)
    # print(response_login.text)

    payload_accept = {
        '_shib_idp_consentIds': 'givenname',
        '_eventId_proceed': 'Accept'
    }

    response_logged = session.post(response_login.url, data=payload_accept)
    # print(response_logged.url)
    # print(response_logged.text)
    # print(get_relay_state_saml(response_logged.text))

    payload_saml = get_relay_state_saml(response_logged.text)
    # print(payload_saml)

    response_moodle = session.post("https://moodle.uni-bielefeld.de/Shibboleth.sso/SAML2/POST", data=payload_saml)
    # print(response_moodle.url)
    # print(response_moodle.text)


def check_for_new_feedback(session):

    def get_uebungsblatter(html):
        soup = bs4.BeautifulSoup(html, features="html.parser")

        # print(soup)
        blaetter = []
        # retrieve all
        return blaetter
    # 此处总是被重定向到个人资料编辑页
    response = session.get(moodle_url)

    blaetter = get_uebungsblatter(response.text)


def scraper():
    config = configparser.ConfigParser()
    config.read('config.ini')
    student_id = config['config']['student_id']
    password = config['config']['password']
    mail = config['config']['mail']
    last_sent = int(config['config']['last_sent'])
    wait_between_calls = int(config['config']['wait_between_calls'])

    with requests.session() as session:
        login(session, student_id, password)
        while True:
            check_for_new_feedback(session)
            time.sleep(60*wait_between_calls)


if __name__ == '__main__':
    scraper()

通过逆向分析浏览器行为发现,点击课程时会先发送带课程ID的GET请求,随后向以下URL发送POST请求:

https://moodle.uni-bielefeld.de/lib/ajax/service.php?sesskey=PWSjDeVJNC&info=core_courseformat_get_state

对应的请求Payload为:

[{"index":0,"methodname":"core_courseformat_get_state","args":{"courseid":2891}}]

我尝试模拟这些请求,但依然会被重定向。希望有人能帮忙分析问题原因并提供解决方案。


内容的提问来源于stack exchange,提问作者ILurch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:05:57