使用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
相关产品推荐
相关产品推荐

