首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python请求--在同一个页面上发送两个请求?

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

Stack Overflow用户
提问于 2016-12-29 14:42:36
回答 2查看 2.6K关注 0票数 0

我试图更改一个网站上的帐户的用户名。需要3个员额参数:

1) newName

2)密码

3) authenticityToken

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

代码语言:javascript
运行
复制
<input type="hidden" name="authenticityToken" value="0640ce533fc7a51b88f79ce17cdbd611f4dc2360"/>

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

劣质真实性标记

我目前使用的代码如下:

代码语言:javascript
运行
复制
import requests
from bs4 import BeautifulSoup

url = "https://account.mojang.com"

#Login and save cookies
r = requests.post("https://account.mojang.com/login", data={'username':'theUsername','password':'thePassword','remember':'true'})
Logincookies = r.cookies

#Parse the page to get rename link
soup = BeautifulSoup(r.text, "html.parser")
renamePage = None
sources = soup.findAll('a',{"href":True})
for source in sources:
    if("/me/renameProfile/" in source["href"]):
       renamePage = source["href"]


#Get AuthToken

authToken = None
r = requests.get(url + renamePage,cookies=Logincookies)
parser = BeautifulSoup(r.text,"html.parser")
srcs = parser.findAll('input')
for src in srcs:
    if(src["name"] == "authenticityToken"):
        authToken = src["value"]
print(authToken)


r = requests.post(url + renamePage, cookies=Logincookies, data={'newName':'theNewUsername','password':'thePassword','authenticityToken':authToken})
print(r.text)

再一次,我如何做到这一点,使GET和POST请求一起进行,这样它就不会使用新页面并接收新的authenticityToken了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-30 02:24:08

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

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2016-12-29 19:36:37

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

代码语言:javascript
运行
复制
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中指定客户端,例如headers={ "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0" }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41381881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档