Python请求在同一页面上发送两个请求?

2024-10-08 20:15:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试更改一个网站上帐户的用户名。需要3个POST参数:

1)新名称
2) 密码
3) 认证Token

每次加载页面时都会随机生成authenticityToken。它是隐藏的输入类型:

<input type="hidden" name="authenticityToken" value="0640ce533fc7a51b88f79ce17cdbd611f4dc2360"/>

我要实现的是获得authenticityToken的值,并在同一页面上发布上面所述的3个参数。现在,我的代码使用GET请求接收authenticityToken,然后发送另一个POST请求。它回来了

Bad authenticity token

我当前使用的代码如下:

^{pr2}$

再一次,我如何才能使GET和POST请求一起转到,这样它就不会使用新页面并接收新的authenticityToken?在


Tags: 代码名称token密码类型input参数get
2条回答

尝试使用^{}。它应该允许您在不同的请求中使用相同的cookies、访问令牌等:

s = requests.Session()
url = "https://account.mojang.com"
r = s.post("https://account.mojang.com/login", data={'username':'theUsername','password':'thePassword','remember':'true'})
Logincookies = r.cookies
...
r = s.get(url + renamePage,cookies=Logincookies)

在某些情况下,您可能还需要在headers中指定client,例如headers={ "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0" }

因此,解决方案是使用一个名为RoboBrowser的库,并向它提供与我先前请求相同的会话:

import requests
from bs4 import BeautifulSoup
from robobrowser import RoboBrowser

session=requests.session()
r = session.post(...)
r = session.get("...")

browser.open(url+renamePage)
rename_form = browser.get_form(class_='standard')
rename_form['newName'].value = "theNewUser"
rename_form['password'].value = "theNewPass"

browser.submit_form(rename_form)

相关问题 更多 >

    热门问题