python网络编程-学习记录

本文介绍如何使用Python搭建一个支持CGI脚本的基本HTTP服务器,并解决常见问题如404错误和权限问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考《Python网络编程基础》+ Python docs

SocketServer是基础文件,如下:

+------------+
| BaseServer |
+------------+
      |
      v
+-----------+        +------------------+
| TCPServer |------->| UnixStreamServer |
+-----------+        +------------------+
      |
      v
+-----------+        +--------------------+
| UDPServer |------->| UnixDatagramServer |
+-----------+        +--------------------+

然后BaseHTTPServer之类的继承于TCPServer, SimpleHTTPServer和CGIHTTPServer继承于BaseHTTPServer.
使用时需要定义一个server类,一个handler类,server类用来监听,handler类用来处理request. handler类会自动调用handle()方法。BaseHTTPServer的handler会对每一个http请求(GET/HEAD等)调用对应的do_*方法(do_GET/do_HEAD等), 并可通过自己的属性与client互动,详见BaseHTTPServer

问题1:
CGI Server:

#!/usr/bin/env python
# Basic HTTP CGI Server Example - Chapter 17 -Chapter17-basichttpcgiserver.py

from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
from CGIHTTPServer import CGIHTTPRequestHandler
from SocketServer import ThreadingMixIn

class ThreadingServer(ThreadingMixIn, HTTPServer):
    pass

sock = ('', 8765)
server = ThreadingServer(sock, CGIHTTPRequestHandler)
#server = HTTPServer(sock, SimpleHTTPRequestHandler)
server.serve_forever()

CGI Script:

#!/usr/bin/env python
# Simple CGI Example - Chapter 18 - chapter18_simple.cgi

import cgitb
cgitb.enable()

import time
print 'Content-type:text/html'
print

print '''<HTML>
<HEAD>
<TITLE>Sample CGI Script</TITLE>
</HEAD>
<BODY>
The present time is %s.
</BODY>
</HTML>''' % time.strftime('%I:%M:%S %p %Z')
print

保存目录(Windows10+chrome浏览器)
D:
- - - - Code
- - - - - - - - Chapter17-basichttpcgiserver.py
- - - - - - - - cgi-bin
- - - - - - - - - - - - chapter18_simple.cgi
原文中说把cgi脚本放到web服务器合适的位置,没有具体说那个路径。
启动服务器:
C:\Users\admin>D:\Code\Chapter17-basichttpcgiserver.py
在浏览器输入:http://localhost:8765/cgi-bin/chapter18_simple.cgi , 显示404:No such CGI script
修改服务器执行路径到D:\Code,重新启动服务器,输入浏览器脚本名字,显示403:CGI script is not executable.根据网上查找,把cgi文件的后缀改为.py即可。修改后执行成功,显示时间:The present time is 11:30:25 PM 中国标准时间.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值