Запросы Post не отображают корректное содержимое в ответ с помощью модуля Requests в Python 3

#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 дополнительных поля?