Python使用Socket发送GET请求访问XAMPP资源返回404如何解决
Socket发送HTTP GET请求返回404问题排查修复方案
核心错误原因
你当前构造的GET请求路径存在冗余前缀错误:HTTP请求行的路径是相对于服务端站点根目录(XAMPP对应htdocs目录)的相对路径,你在路径前多加了/localhost,会导致Apache去htdocs目录下查找名为localhost的文件夹,该目录不存在自然返回404。
假设你的文件存放路径为htdocs/trabalho/1.txt、htdocs/trabalho/2.txt,正确的请求路径应为/trabalho/1.txt,无需加localhost前缀。
排查步骤
- 先通过浏览器直接访问
http://127.0.0.1/trabalho/1.txt验证路径有效性,如果浏览器也返回404,先确认trabalho文件夹是否存放在htdocs根目录、文件名是否存在拼写/大小写错误。 - 打印完整的服务端返回报文,查看404响应中提示的未找到路径,可直接定位路径拼接错误。
- 可在请求头中添加
Connection: close字段,避免服务端保持长连接导致recv方法长时间阻塞。
修复后代码
from socket import* # 服务端IP、端口 HOST = '127.0.0.1' PORT = 80 # 创建TCP socket clientSocket = socket(AF_INET, SOCK_STREAM) # 建立与服务端的连接 clientSocket.connect((HOST,PORT)) # 选择要请求的诗人文件 print('请选择你最喜欢的诗人: ') voto = input('1-路易斯·德·卡蒙斯 或 2-费尔南多·佩索阿') # 构造GET请求 pedidoHTTP = None if(voto == '1'): # 移除路径中的/localhost前缀,添加Connection: close头 pedidoHTTP = f"GET /trabalho/1.txt HTTP/1.1\r\nHost: {HOST}:{PORT}\r\nConnection: close\r\n\r\n".encode() elif(voto == '2'): pedidoHTTP = f"GET /trabalho/2.txt HTTP/1.1\r\nHost: {HOST}:{PORT}\r\nConnection: close\r\n\r\n".encode() else: print('请输入1或2进行有效选择') clientSocket.close() # 输入非法时直接退出,避免后续执行sendall报错 exit() clientSocket.sendall(pedidoHTTP) # 读取服务端返回 Rececao = clientSocket.recv(8000).decode() # 打印返回结果验证 print(Rececao) clientSocket.close()
内容的提问来源于stack exchange,提问作者Diogo Fonseca
相关产品推荐
相关产品推荐

