AttributeError: у объекта 'dict' нет атрибута 'encode' - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь отправить запрос на целевой сайт, используя данные из нескольких частей формы

m = MultipartEncoder(
    fields={"auth":{"id":str(random.randint(0, 999991)),"sign":randoms(32)},
    "data":{"action":"login","login":"embrella","password":"steffano321","stayLogged":"False"}
    })
s = requests.Session()
s.post('targetwebsite', data=m, headers=headers['Content-Type': m.content_type], timeout=5)

Но я всегда получаю

line 25, in <module>
    "data":{"action":"login","login":"embrella","password":"steffano321","stayLogged":"False"}
AttributeError: 'dict' object has no attribute 'encode'

Я не знаю, что из-за этого я даже пытался сначала преобразовать в JSON, а затем опубликовать

uuhh = {'auth':{"id":str(random.randint(0, 999991)),"sign":randoms(32)},
    "data":{"action":"login","login":"embrella","password":"steffano321","stayLogged":"False"}}
    fields = json.dumps(uuhh)
m = MultipartEncoder(fields=fields)

Но там написано ValueError: not enough values to unpack (expected 2, got 1), так что я думаю, что это очень неправильно.

1 Ответ

1 голос
/ 07 февраля 2020

Кажется, вы передаете auth и data как словари, но вместо этого они должны быть строками. Измените

    m = MultipartEncoder(
    fields={"auth":{"id":str(random.randint(0, 999991)),"sign":randoms(32)},
    "data":{"action":"login","login":"embrella","password":"steffano321","stayLogged":"False"}
    })

на

    m = MultipartEncoder(
    fields={"auth":'{{"id":{},"sign":{}}}'.format(random.randint(0, 999991), randoms(32)),
    "data":'{{"action":"login","login":"embrella","password":"steffano321","stayLogged":"False"}}'
    })

, чтобы исправить вашу проблему.

MultipartEncoder пытается запустить метод .encode(...) для значений полей , Поскольку вы передаете dict, он не может кодировать, и ошибка

...