web-dev-qa-db-ja.com

strに連結できるのは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()

何らかの理由でこのエラーを取得します

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

エンコーディングとデコーディングは私には正しいようです、そして.encode()の前に\ nを使用してそれを転送しました。これはクラス用です

5
Pharah181

問題は、連結する前にエンコードしていることです。

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

最初に連結してから、全体をエンコードする必要があります。

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