python http get 请求_Python:编写HTTP Server处理GET请求

##代码:

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

# coding: UTF-8

import socket

import sys

HOST = '' # Symbolic name, meaning all available interfaces

PORT = 8000 # Arbitrary non-privileged port

socket_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 port

try:

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 socket

socket_server.listen(10)

print 'Socket now listening'

# now keep talking with the client

while 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:8000

HTTP/1.1 200 OK

Content-Type: text/html

Hi

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

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

可用的HTTP server还需要多线程、epoll等来完善。Code a simple socket server in Python给出了示例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值