#python #post #python-requests
#python #Публикация #python-запросы
Вопрос:
В настоящее время я пытаюсь создать скрипт python для входа в мой DVWA с заданным пользователем и паролем, но у меня возникли проблемы с ответом на запрос post. Прикрепленные 2 картинки объяснят это намного лучше, но, короче говоря, «Ошибка входа в систему» не отображается в содержимом ответа, но на веб-сайте это есть, почему это? Я делаю что-то не так?
https://i.stack.imgur.com/bic94.png
https://i.stack.imgur.com/2MfE9.png
Мой код:
import requests
import time
userna = input("Username: ")
passw = input("Password: ")
target_url = "http://localhost/dvwa/login.php"
data_dict = {"username": userna,"password": passw, "Login": "submit"}
response = requests.post(target_url, data=data_dict)
if 'Login failed' not in response.content.decode():
print("success!")
else:
print("login failed")```
Ответ №1:
Возникла аналогичная проблема, но я думаю, что знаю, в чем ваша проблема. Он не показывает вам «Ошибка входа в систему», потому что форма не отправляется. Форма не отправляется, потому что вам не хватает параметров для запроса на вход. Если у вас когда-либо была форма, вы можете попробовать запрос GET вместо запроса POST, и он должен предоставить вам параметры, необходимые для отправки. Если они изменятся, вам придется собирать эти параметры динамически. Для нашей формы входа в DVWA требуется еще два поля, которые не были включены. Это «Login: Вход в систему» и «user_token: это изменяет каждый сеанс».
#!/usr/bin/python3
import requests
from bs4 import BeautifulSoup
target_url = 'http://localhost/login.php'
s = requests.Session()
username = str(input('Username: '))
password = str(input('Password: '))
user_token = '*'
Login = 'Login'
data_dict = {'username':username,'password':password,'Login':'Login','user_token':user_token}
temp = []
initial_response = s.get(target_url)
for key, value in data_dict.items():
if '*' != value:
temp.append([key, value])
else:
print('finding the value of', key)
soup = BeautifulSoup(initial_response.text, 'html.parser')
found_value = soup.find('input', {'name':key})['value']
print('it is: ', found_value)
temp.append([key, found_value])
z = dict(temp)
p = s.post(target_url, data = z)
print(p.url)
if p.url != target_url:
print('login success!')
else:
print('login failed!')
Комментарии:
1. Большое вам спасибо, кажется, сейчас это работает. Как вы нашли эти 2 дополнительных поля?