使用GET / filename.html HTTP ......... python服务客户端

时间:2018-04-06 00:47:52

标签: python http server get client

希望我能说清楚一点。我必须在python中创建一个服务器和客户端,相互发送HTTP GET请求。现在我创建了一个基本的服务器/客户端程序,现在我的目标是向服务器发送HTTP GET请求(来自我保存的html文件)和服务器以显示内容。 示例服务器将显示类似的内容 日期: 内容长度: 内容类型: 截至目前,当我运行客户端并键入GET / filename.html HTTP / 1.1 \ n \ r时,服务器不会显示。当我在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()

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

1 个答案:

答案 0 :(得分:0)

错误消息非常简单,只需阅读它即可修复无效的代码。

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()。您可以在此处了解这两者之间的差异:Difference between __str__ and __repr__ in Python

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