使用 GET/ 文件名.html HTTP .....python serve client



希望我能把这一点说清楚。我必须在python中创建一个服务器和客户端,相互发送HTTP GET请求。现在我创建了一个基本的服务器/客户端程序,现在我的目标是向服务器发送HTTP GET请求(来自我保存的html文件(和服务器以显示内容。示例服务器将显示类似以下内容日期:内容长度:内容类型:截至目前,当我运行客户端并键入 GET/文件名时.html HTTP/1.1\are 服务器不显示。当我在 Linux shell 中键入该确切命令时,它会完美显示。如何在客户端和服务器中执行此操作。希望这是有道理的。这是我的客户端和服务器。

 #CLIENT
import socket
import sys
host = socket.gethostname()    
port = 12345                   # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
print(s.recv(1024))
inpt = input("type")
b = bytes(inpt, 'utf-8') #THIS SENDS BUT SERVER DOESDNT RECIEVE
s.sendall(b)
print("Message Sent")

#SERVERimport socket
import sys
host = ''        # Symbolic name meaning all available interfaces
port = 12345     # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(5)
while True:
  c, addr = s.accept()
  print("Connection accepted from " + repr(addr[1]))
  c.send(b"Server Approved")
  print(repr(addr[1]) + ":" + c.recv(1024).decode("UTF-8"))
  c.close()

我想在我的服务器上键入这样的东西并显示其内容
获取/google.com HTTP/1.1\r

错误消息非常简单,只需阅读它即可修复不起作用的代码。

Traceback (most recent call last):
    ...
print(repr(addr[1]) + ":" + c.recv(1024))
TypeError: must be str, not bytes   

添加.decode("utf-8")

print(repr(addr[1]) + ":" + c.recv(1024).decode("utf-8"))

更清楚的是使用str()而不是repr() .你可以在这里阅读这两者之间的区别:Python 中 __str__ 和__repr__之间的区别。

print(str(addr[1]) + ":" + c.recv(1024).decode("utf-8"))

最新更新