【发布时间】:2017-03-28 11:41:04
【问题描述】:
我已经开始学习使用 python 进行网络编程,但我的服务器出现了一些问题。
我正在尝试构建一个可以用一些图像、js 和 css 表示简单服务器的简单服务器,但我无法弄清楚我的文件传输代码有什么问题,所以在我用谷歌搜索了一个多小时后我放弃。 我正在通过浏览器检查,它发送的 html 非常好,但在页面的上部有 JS 代码。当我尝试单独请求图像时,浏览器下载了“name_I_choose.jpg”文件,但它是 0kb 文件。
这是我的代码:
import socket
import os
print "server on"
server_socket = socket.socket()
server_socket.bind(("127.0.0.1", 80))
server_socket.listen(10)
while True:
(client_socket, client_address) = server_socket.accept()
try:
data = client_socket.recv(1024)
# print data
except socket.error:
print "no more requests, bye"
break
if not data:
break
lines = data.split("\r\n")
print lines[0]
parts = lines[0].split(" ")
print "1: " + parts[0] + " 2: " + parts[1] + " 3: " + parts[2]
if parts[0] == "GET" and parts[2] == "HTTP/1.1":
print "good"
if parts[1] == "\\" or parts[1] == "/":
path = "path/to/root/index.html"
else:
path = "path/to/root" + parts[1].replace("\\", "/")
if os.path.isfile(path):
f = file(path, 'rb')
size = b = os.path.getsize(path)
print size
types = {"txt": "text/html; charset=utf-8", "html": "text/html; charset=utf-8", "jpg": "image/jpeg",
"js": "text/javascript; charset=utf-8", "css": "text/css"}
f_type = types.get(path.split(".")[1])
data = f.read(size)
print "sending data"
client_socket.send("HTTP/1.0 200 " + str(size) + "\r\n" + "Content-Type: " + f_type)
client_socket.send(data)
else:
print "file not found"
print path
client_socket.send("HTTP/1.0 404 -1\r\n")
else:
print "not GET HTML FORM"
break
print "done"
client_socket.close()
server_socket.close()
可能有很多问题,所以我会很感激你提出的一切建议。谢谢:)
【问题讨论】:
-
您可以在运行此代码时包含一些输出吗?有帮助。
-
你能说得更具体些吗?什么样的输出?
-
对不起——我的意思是这个程序的输出。您将该程序作为服务器运行,然后尝试从中获取文件,对吗?你从正在运行的服务器看到什么输出?我在你的代码中看到了打印语句——你能告诉我们那个输出吗?你是如何从这个正在运行的服务器中获取数据的?
-
这是我刚刚尝试在浏览器上获取 127.0.0.1 时的输出:服务器在 GET / HTTP/1.1 1: GET 2: / 3: HTTP/1.1 good path/to/file/ index.html 25592 发送数据完成
-
它是 127.0.0.1/path/to/image.jpg 的输出:服务器在 GET /imgs/abstract.jpg HTTP/1.1 1: GET 2: /path/to/image.jpg 3 : HTTP/1.1 好 path/to/root/path/to/image.jpg 37193 发送数据完成
标签: python sockets http networking server