Python выдает ошибку, подобный байту объект требуется, а не список

#python-3.x #list #sockets #memoryview

#python-3.x #Список #розетки #просмотр памяти

Вопрос:

Я пытаюсь подключить сокет с помощью следующего кода

     try:
        # create an INET, STREAMing socket
        self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # now connect to the web server on port 80 - the normal http port
        self.client.connect((host, port))
        user = ['User.loginByToken', access_token]
        self.client.sendall(user)
        # self.client._locust_environment = self.environment
    except Exception as e:
        color_print("n[!] Check Server Address or Port", color="red", underline=True)
 

это выдает ошибку memoryview: a bytes-like object is required, not 'list' . что я могу сделать, чтобы решить эту проблему?

Комментарии:

1. Это не исключение, которое вы получаете, но в любом случае вы можете отправлять и получать байты только через сокет, поэтому вам нужно кодировать свои данные в байт-подобный объект. Кодирование a str легко, например User.loginByToken'.encode('utf-8') , даст вам bytes объект. Я понятия не имею, что access_token это такое, поэтому вам нужно будет выяснить, как это закодировать. Вероятно, лучшим решением является использование протокола более высокого уровня, но без более подробной информации я ничего не мог предложить.

Ответ №1:

Для отправки через сокет вам необходимо преобразовать пользовательскую переменную в байты: Вы можете попробовать это:

 import json

user = json.dumps({'User.loginByToken': access_token})
user = user.encode("utf-8")