HTTP协议以及PYTHON开发技巧 - lrenjundk的专栏 - 博客频道 - CSDN.NET
http协议的相关知识应该都很清楚,这里简单回顾下其流程。首先HTTP底层是利用TCP进行通讯的;其次,HTTP本身协议是面向无连接的:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
Python采用httplib库进行HTTP通讯,用法很简单:
- import httplib #导入httplib库
- conn = httplib.HTTPConnection("10.197.32.136",8080) #建立http链接,只需要IP地址和端口
- conn.request("POST","/RealTimeServer/WebSocketDemo",str,{}) #发送url请求
- response = conn.getresponse() #获取返回信息
- conn.close() #关闭链接
import httplib #导入httplib库 conn = httplib.HTTPConnection("10.197.32.136",8080) #建立http链接,只需要IP地址和端口 conn.request("POST","/RealTimeServer/WebSocketDemo",str,{}) #发送url请求 response = conn.getresponse() #获取返回信息 conn.close() #关闭链接
request函数是非阻塞函数,也就是说,它向服务器发送了url请求之后,可以正常运行之后的任务。
getresponse函数是阻塞函数,如果没有收到服务器的返回信息,程序将无法继续。
close函数在任何地方都可以调用,因此,如果无需服务器返回信息,则可以在发送请求之后就关闭链接。
请注意,Httplib无法连续发送两个request,例如:
- conn.request("POST","/RealTimeServer/WebSocketDemo",str1,{})
- conn.request("POST","/RealTimeServer/WebSocketDemo",str2,{})
conn.request("POST","/RealTimeServer/WebSocketDemo",str1,{}) conn.request("POST","/RealTimeServer/WebSocketDemo",str2,{})
程序将会抛异常,并且关闭。因为http协议本身一次链接只支持一个request,在收到response或者关闭才能开启下一次链接。所以,正常的程序应该是:
- conn.request("POST","/RealTimeServer/WebSocketDemo",str1,{})
- conn.close()
- conn.request("POST","/RealTimeServer/WebSocketDemo",str2,{})
conn.request("POST","/RealTimeServer/WebSocketDemo",str1,{}) conn.close() conn.request("POST","/RealTimeServer/WebSocketDemo",str2,{})或者:
- conn.request("POST","/RealTimeServer/WebSocketDemo",str1,{})
- response = conn.getresponse()
- conn.request("POST","/RealTimeServer/WebSocketDemo",str2,{})