Python实现HTTP GET请求
来源:互联网 发布:阿里云邮箱注册 编辑:程序博客网 时间:2024/05/17 01:53
TCP socket
在互联网上,我们可以让某台计算机作为服务器。服务器开放自己的端口,被动等待其他计算机连接。当其他计算机作为客户,主动使用socket连接到服务器的时候,服务器就开始为客户提供服务。
在Python中,我们使用标准库中的socket包来进行底层的socket编程。
首先是服务器端,我们使用bind()方法来赋予socket以固定的地址和端口,并使用listen()方法来被动的监听该端口。当有客户尝试用connect()方法连接的时候,服务器使用accept()接受连接,从而建立一个连接的socket:
# Written by Windy# Server sideimport socket# AddressHOST = ''PORT = 8000reply = 'Yes'# Configure sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((HOST, PORT))# passively wait, 3: maximum number of connections in the queues.listen(3)# accept and establish connectionconn, addr = s.accept()# receive messagerequest = conn.recv(1024)print 'request is: ',requestprint 'Connected by', addr# send messageconn.sendall(reply)# close connectionconn.close()
socket.socket()创建一个socket对象,并说明socket使用的是IPv4(AF_INET,IP version 4)和TCP协议(SOCK_STREAM)。
然后用另一台电脑作为客户,我们主动使用connect()方法来搜索服务器端的IP地址(在Linux中,你可以用$ifconfig来查询自己的IP地址)和端口,以便客户可以找到服务器,并建立连接:
# Written by Windy# Client sideimport socket# AddressHOST = '172.20.202.155'PORT = 8000request = 'can you hear me?'# configure sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((HOST, PORT))# send messages.sendall(request)# receive messagereply = s.recv(1024)print 'reply is: ',reply# close connections.close()
现在,我们写出一个HTTP服务器端:
#coding=utf-8#Python HTTP服务器端'''自己编写一个HTTP服务器端使用socket'''#Written by Winyimport socketimport datetime#AddressHOST=''PORT=8882# Prepare HTTP responsetoday = datetime.datetime.now()text_content = '''HTTP/1.x 200 OK Content-Type: text/html<head><title>WOW</title></head><html><p>Wow, Python Server</p>'''+ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") +'''<p>Wow, Python Server</p><IMG src="test.jpg"/></html>'''# Read picture, put into HTTP formatf = open('test.jpg','rb')pic_content = '''HTTP/1.x 200 OK Content-Type: image/jpg'''pic_content = pic_content + f.read()f.close()# Configure sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind((HOST, PORT))# infinite loop, server foreverwhile True: # 3: maximum number of requests waiting s.listen(3) conn, addr = s.accept() request = conn.recv(1024) print request method = request.split(' ')[0] src =request.split(' ')[1] # deal with GET method if method == 'GET': # ULR if src == '/test.jpg': content = pic_content else: content = text_content print 'Connected by', addr print 'Request is:', request conn.sendall(content) # close connection conn.close()
使用浏览器实验
为了配合上面的服务器程序,我已经在放置Python程序的文件夹里,保存了一个test.jpg图片文件。我们在终端运行上面的Python程序,作为服务器端,再打开一个浏览器作为客户端。(如果有时间,你也完全可以用Python写一个客户端。原理与上面的TCP socket的客户端程序相类似。)
在浏览器的地址栏输入:
127.0.0.1:8882
文章参考地址
0 0
- Python实现HTTP GET请求
- python发送HTTP GET请求
- python发送HTTP GET请求
- Python发送HTTP GET请求
- Python - Http Get Post请求
- python urllib2 实现HTTP 的GET POST 请求
- 【Http】httputils实现get请求
- PHP 实现HTTP get 请求
- python实现HTTP 请求
- python socket发http GET请求数据包
- C#实现http协议GET、POST请求
- C#实现http协议GET、POST请求
- C# 实现http协议GET、POST请求
- C# 实现HTTP GET POST请求
- C#实现http协议GET、POST请求
- C++ 简单实现HTTP GET/POST 请求
- HTTP请求 GET POST 网络编程实现
- socket编程实现http GET请求
- 分解质因数
- facebook 获取广告费用的api
- TI BLE协议栈中使用UART
- python MethodType方法详解和使用
- 应用程序间发送消息
- Python实现HTTP GET请求
- JS中闭包的理解
- 使用go-sql-driver.mysql包报错unexpected EOF
- Elasticsearch 5.x (四) lucene 的评分机制
- Android中View绘制流程
- 统计学习方法概括
- AVLtree
- HtttpServlet Request 与 HttpServlet Response
- linux-shell命令之chmod(change mode)【更改权限】