Я пытаюсь изменить имя пользователя учетной записи на веб-сайте. Есть 3 параметра POST требуемые:Запросы на Python - Отправить по два запроса на этой же странице?
1) NEWNAME
2) пароль
3) authenticityToken
authenticityToken генерируется случайным образом каждый раз, когда страница загружена. Это тип ввода скрытых:
<input type="hidden" name="authenticityToken" value="0640ce533fc7a51b88f79ce17cdbd611f4dc2360"/>
То, что я пытаюсь добиться, чтобы получить значение authenticityToken и на той же странице POST 3 параметров, необходимых, как указано выше. На данный момент мой код получает подлинностьToken, используя запрос GET, а затем отправляет другой запрос POST. Она возвращает
Bad подлинность маркера
Код настоящее время я использую ниже:
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 перейти к вместе, чтобы он не использовал новую страницу и не получил новую аутентичностьToken?
Вы не _need_ RoboBrowser - RoboBrowser на самом деле [с использованием request.Session()] (https://github.com/jmcarp/robobrowser/blob/master/robobrowser/browser.py#L72), поскольку указано @Andersson жизнеспособный способ получить то, что вы хотите - вы даже создаете экземпляр сеанса через request.session() (но явно не указываете его использование) в своем ответе. – Jmills
Нет. Я только что прокомментировал код RoboBrowser и отправил запрос POST: r = session.post (url + renamePage, data = {'newName': newname, 'password': password}), и я получил обратно authenticityToken. – RaghavJhavar