博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python:编写HTTP Server处理GET请求
阅读量:7147 次
发布时间:2019-06-29

本文共 1728 字,大约阅读时间需要 5 分钟。

hot3.png

##代码:

下面代码修改自http://www.binarytides.com/python-socket-server-code-example/,支持GET请求这一部分是自己写的。

# coding: UTF-8import socketimport sysHOST = ''   # Symbolic name, meaning all available interfacesPORT = 8000  # Arbitrary non-privileged portsocket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # 避免出现端口占用的错误print 'Socket created'# Bind socket to local host and porttry:    socket_server.bind((HOST, PORT))except socket.error as msg:    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]    sys.exit()print 'Socket bind complete'# Start listening on socketsocket_server.listen(10)print 'Socket now listening'# now keep talking with the clientwhile 1:    # wait to accept a connection - blocking call    conn, addr = socket_server.accept()    conn.setblocking(False)  # 非阻塞,接收数据需要try...except...    print 'Connected with ' + addr[0] + ':' + str(addr[1])    # Receiving from client    data = ''    response = 'HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n'    while True:        if '\r\n\r\n' in data:  # 如果是POST方法,还要继续接收数据;如果含有图片,会更麻烦            break        try:            data += conn.recv(1024)        except:            pass    print '接收的数据->start'    print data    print '接收的数据->end'    print '向客户端发送数据:'    conn.sendall(response+'''

Hi

''') print '发送完毕,关闭该连接' conn.close() # 别忘了socket_server.close()

可以在浏览器中访问http://127.0.0.1:8000/,或者curl:

letian $ curl -i http://127.0.0.1:8000HTTP/1.1 200 OKContent-Type: text/html

Hi

对于GET方法,接收完请求头后,分析一下请求头,生成数据返回即可。

对于POST方法,接收完请求头,需要在请求头中找Content-Length,然后继续接收Content-Length制订长度的数据。

可用的HTTP server还需要多线程、epoll等来完善。给出了示例。

##资料

转载于:https://my.oschina.net/letiantian/blog/423892

你可能感兴趣的文章
MES之殇和工业IOT之春
查看>>
阿里云网络漏洞扫描系统AVDS(商业化)发布
查看>>
python splinter 小坑说明
查看>>
控制input输入格式
查看>>
一次XEN启动中的错误捕获
查看>>
esxi嵌套华为Fusioncomputer安装VRM几个关键步骤。
查看>>
DNS设置引起的登录延迟
查看>>
saltstack之SLS文件
查看>>
JAVA构建缓存
查看>>
解决:Loading kernel module CAP_SYS_MODULE CAP_NET_ADMIN alias netdev-eth0 instead
查看>>
wav2letter-基于深度学习的语音识别
查看>>
Java class.forname()和newinstance
查看>>
学习计划书
查看>>
[iOS Animation]-CALayer 视觉效果
查看>>
wps的ppt放映时不能完全全屏的解决方法
查看>>
我的友情链接
查看>>
本地存储
查看>>
react-native环境配置入坑指南.
查看>>
使用qemu
查看>>
小试下新博客,一个列传行的SQL
查看>>