python - 学习模拟登录,卡在发送POST请求之后?
阿神
阿神 2017-04-18 10:21:50
0
4
879

学习模拟登录,发送了post请求之后页面还是登录页面啊,不知道原因

import re
import requests
url='http://cer.imufe.edu.cn/authserver/login?service=http%3A%2F%2Fmy.imufe.edu.cn%2Findex.portal'
html=requests.get(url).text
lt_value=re.compile(r'name="lt" value="(.*?)"').search(html).group(1)
execution_value=re.compile(r'name="execution" value="(.*?)"').search(html).group(1)
dt={}
dt['username']='帐号'
dt['password']='密码'
dt['signIn']=''
dt['lt']=lt_value
dt['execution']=execution_value
dt['_eventId']='submit'
hd={}
hd['User-Agent']='Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
hd['Referer']=url
url2='http://my.imufe.edu.cn/detach.portal?.pmn=view&action=bulletinBrowser&.ia=false&.pen=pe1253&bulletinId=cf2509cf-9a54-11e6-86e2-7347af9c723b'
se=requests.session()
se.post(url,data=dt,headers=hd)
print(se.get(url2).text)

以下是抓取的数据,是不是我的哪里找错了?

阿神
阿神

闭关修行中......

répondre à tous(4)
Ty80

Vous pouvez utiliser directement le contexte de session, puis toutes les demandes sont complétées via une instance de session. L'objet de session gérera automatiquement les cookies pour vous. Bien entendu, le contenu de l'en-tête doit être défini par vous-même lors de la première demande. . La structure du code est à peu près la suivante :

import requests

url = ""
headers = {}
with requests.Session() as s:
    s.headers.update(headers)
    s.get(url)
    s.post(login_url)
PHPzhong

Regardons à nouveau le document des requêtes, les noms des variables a b c d sont accrocheurs

Peter_Zhu

Non cookie

f = requests.session() // 此时相当于打开了浏览器会话,接下来的操作都应该在这个会话里面执行,就不会有 cookie 问题了

requests.get remplacé par f.get

洪涛

Tout d'abord, vous devez comprendre le principe de confiance du serveur après vous être connecté

Le serveur enregistrera une valeur de session comme identifiant lorsque vous vous connecterez et vous renverra un en-tête de réponse avec un champ Set-Cookie comme identifiant, vous devez donc envoyer une demande d'obtention avec le cookie lorsque vous vous êtes connecté dans. Bon

C'est comme si vous aviez acheté un billet électronique en ligne. Les gens savent que vous l'avez acheté, mais comment prouver qu'il s'agit bien de vous lorsque vous entrez dans la salle. Vous devez entrer avec le billet physique qu'ils vous ont donné après l'achat. >

Retour au scénario actuel, le serveur sait que vous êtes connecté et a enregistré la session (ce qui équivaut à enregistrer les données de commande pour l'achat de billets. À ce moment-là, lorsque vous envoyez une demande d'obtention, vous devez le prouver). vous venez de vous connecter. Que vous (équivalent à avoir besoin d'un ticket physique), vous devez à ce moment envoyer les données dans le champ Set-Cookie qui vous ont été renvoyées par le serveur lors de la connexion (retirez votre ticket physique pour prouver que vous avez acheté le billet), puis le serveur pourra confirmer. Votre identité vous donnera les données correspondantes (équivalent à une entrée avec un billet)

Retour à l'implémentation spécifique du code, vous devez vérifier comment la bibliothèque de requêtes apporte le cookie de connexion lors de l'envoi d'une requête, afin que vous puissiez vous connecter avec succès

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!