web request
#模拟浏览器请求web服务器
import socket
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建套接字
tcpSocket.connect(("121.36.32.38",80))
requestLine = "GET / HTTP/1.1\r\n"
requestHeader = "host:www.yaojun.com\r\n"
requestBlank = "\r\n"
requestData = requestLine + requestHeader + requestBlank
tcpSocket.send(requestData.encode()) #已经建立了连接 直接发送
receiveData = tcpSocket.recv(4096)
receiveText = receiveData.decode()
loc = receiveText.find("\r\n\r\n")
html = receiveText[loc+4:]
with open("index.html","w+") as f:
f.write(html)
tcpSocket.close()
web response
返回浏览器固定数据
import socket
def requestHandler(newsocket,ipPort):
receiveData = newsocket.recv(1024)
if not receiveData:
print("%s客户端已经断开!"%str(ipPort))
newsocket.close()
return
responseLine="HTTP/1.1 200 OK\r\n"
responseHeader ="Server:Python20WS/2.1\r\n"
responseBlank ="\r\n"
responseBody="hello world!"
responseData = responseLine+responseHeader+responseBlank+responseBody
newsocket.send(responseData.encode())
newsocket.close()
pass
def main():
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建套接字
tcpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
tcpSocket.bind(("",8080)) #元组
tcpSocket.listen(128) #监听上限 在windows 128有效 在linux无效
while True:
newSocket,ipPort = tcpSocket.accept() #阻塞等待客户端连接 ipPort是个元组只有两个元素
print(ipPort[0]) #IP
print(ipPort[1]) #port
requestHandler(newSocket,ipPort)
if __name__ == '__main__':
main()
Web Server
从浏览器打开返回固定页面
import socket
def requestHandler(newsocket,ipPort):
receiveData = newsocket.recv(1024)
if not receiveData:
print("%s客户端已经断开!"%str(ipPort))
newsocket.close()
return
responseLine="HTTP/1.1 200 OK\r\n"
responseHeader ="Server:Python20WS/2.1\r\n"
responseBlank ="\r\n"
#从文件中读入固定页面
with open("index.html", "rb") as f:
responseBody = f.read() #读入的是二进制文件
responseData = (responseLine+responseHeader+responseBlank).encode()+responseBody
newsocket.send(responseData)
newsocket.close()
pass
def main():
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建套接字
tcpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
tcpSocket.bind(("",8080)) #元组
tcpSocket.listen(128) #监听上限 在windows 128有效 在linux无效
while True:
newSocket,ipPort = tcpSocket.accept() #阻塞等待客户端连接 ipPort是个元组只有两个元素
print(ipPort[0]) #IP
print(ipPort[1]) #port
requestHandler(newSocket,ipPort)
if __name__ == '__main__':
main()
来源:CSDN
作者:姚军博客
链接:https://blog.csdn.net/SYaoJun/article/details/103883333