web-dev-qa-db-fra.com

ne peut concaténer que str (pas des "octets") à str

import socket
import os

user_url = input("Enter url: ")

Host_name = user_url.split("/")[2]
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((Host_name, 80))
cmd = 'GET ' + user_url + ' HTTP/1.0\r\n\r\n'.encode()
mysock.send(cmd)

while True:
    data = mysock.recv(512)
    if len(data) < 1:
        break
     print(data.decode(),end='\n')

mysock.close()

Pour une raison quelconque, j'obtiens cette erreur

Entrez l'url: http://data.pr4e.org/romeo.txt

 7 mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 8 mysock.connect((Host_name, 80))
 9 cmd = 'GET ' + user_url + ' HTTP/1.0\r\n\r\n'.encode()
 TypeError: can only concatenate str (not "bytes") to str

Avez-vous des idées sur ce que je fais de mal? Le codage et le décodage me semblent corrects, et je l'ai transféré en utilisant\n avant .encode (). C'est pour une classe

5
Pharah181

Le problème est que vous encodez avant de concaténer:

'GET ' + user_url + ' HTTP/1.0\r\n\r\n'.encode()

Vous devez d'abord concaténer, puis encoder le tout:

('GET ' + user_url + ' HTTP/1.0\r\n\r\n').encode()
0
Aran-Fey