FIle Not Found

FIle Not Found

# 具体遇到的问题
FIle Not Found

# 报错信息的截图
http://img1.sycdn.imooc.com//climg/5fd700a10963f00b07850192.jpg

# 相关课程内容截图

# 尝试过的解决思路和结果

程序找不到我的index.html​,项目路径如下:

http://img1.sycdn.imooc.com//climg/5fd701370969e3d903050411.jpg

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

import socket
import multiprocessing
HTML_DIR = "./html"


def handle_client(client):
#不断地接受客户端的数据
   client_request_data = client.recv(1024)
print("当前客户端的请求数据为:%s"%client_request_data)
#想客户端相应数据,是根据HTTP协议的规范的
   #状态行,包含HTTP协议版本,状态码和状态描述,以空格分隔
   response_start_line = "HTTP/1.1 200 OK\r\n"
   #定义了一个响应头
   response_headers = "Server:My server\r\n"
   #响应正文
   # response_body = "Hello World"
   #GET / HTTP/1.1\r\n
   #通过空格分隔客户端请求数据
   request_data = client_request_data.decode().split(" ")
#拿到客户端要请求的文件
   if request_data[1] == "/":
#index.html前面一定要加上/
       filename = "/index.html"
   else:
filename = request_data[1]
#filename---index.html
   #有可能客户端请求的是图片文件,视频文件
   try:
#文件可以找到
       with open(HTML_DIR+filename, 'rb') as f:
response_body = f.read()
except:
#文件找不到
       response_start_line = "HTTP/1.1 404 Not Found\r\n"
       response_body = "FIle Not Found".encode("utf-8")
#相应数据:响应正文,响应头之间有一个空行
   response = response_start_line+response_headers+"\r\n"+response_body.decode()
print("服务器相应的数据为:%s"%(response))
#一定要回复二进制数据
   client.send(response.encode("utf-8"))
client.close()

if __name__ == '__main__':
#创建一个TCP类型的HTTP服务器
   server = socket.socket(type=socket.SOCK_STREAM)
#地址的绑定,传入一个元组,如果地址里面什么都不写,代表的是我当前机器的所有IP地址
   #IP地址的端口号是8080
   server.bind(("",8080))
#服务端监听,监听个数128
   server.listen(128)
print("WEB服务器已经启动...")
#使用while循环不停接受客户端的请求
   while True:
#接受客户端的请求,并且返回两个信息,分别为客户端的socket和客户端的地址信息
       client,address = server.accept()
print("%s,%s连接上了WEB服务器"%(address[0],address[1]))
#引入多进程,处理多个客户端的请求
       client_process = multiprocessing.Process(target=handle_client,args=(client,))
#开启进程
       client_process.start()

在这里输入代码,可通过选择【代码语言】突出显示

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕美 2020-12-14 14:41:55

同学,你好,同学得到的请求数据如下图所示,在根据下标取值时request_data[1]值不对所以filename值不对Not Found,

http://img1.sycdn.imooc.com//climg/5fd708020908444207500138.jpg

http://img1.sycdn.imooc.com//climg/5fd708b409d5e44504410222.jpg

请求页面时发送了两个请求,还请求了浏览器的图标,当前html没有设置的,所以请求不到,在5-2中有提到该情况。同学可以重新请求是可以正常得到结果的

  • 提问者 向佐佐 #1

    老师,重新请求了index.html但还是file not found,报错代码如下所示:


    127.0.0.1,60879连接上了WEB服务器

    当前客户端的请求数据为:b'GET /index.html HTTP/1.1\r\nHost: 127.0.0.1:8080\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nSec-Fetch-Site: none\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-User: ?1\r\nSec-Fetch-Dest: document\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,en-US;q=0.7,en;q=0.6\r\nCookie: csrftoken=DlX0agdLA7U7TAr51sNRwPvjDDkG49qxHYCgL54SxNvCH4xDrF9ImNwaOEVgN2AZ; sessionid=4oxag9th78tn7u06afalgvf1qq4ddw85\r\n\r\n'

    服务器相应的数据为:HTTP/1.1 404 Not Found

    Server:My server


    FIle Not Found


    2020-12-14 15:36:02
  • 好帮手慕美 回复 提问者 向佐佐 #2

    同学,你好,运行同学提供的代码,访问index.html页面是可以正常得到结果的

    http://img1.sycdn.imooc.com//climg/5fd71a1d0901ecc714590557.jpg

    1、同学可以打印filename的值看下是否为/index.html

    2、去掉代码中的try……except……语句,根据具体的报错信息进行修改

    http://img1.sycdn.imooc.com//climg/5fd719c0098fe5cf10110329.jpg

    祝学习愉快~~~~

    2020-12-14 15:54:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
4.入门主流框架Scrapy与爬虫项目实战
  • 参与学习           人
  • 提交作业       107    份
  • 解答问题       1672    个

Python最广为人知的应用就是爬虫了,有趣且酷的爬虫技能并没有那么遥远,本阶段带你学会利用主流Scrapy框架完成爬取招聘网站和二手车网站的项目实战。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师