python基于http的网络通信和网站端口暴露;Python网络编程之HTTP协议的python应用

一、HTTP协议概述

HTTP(Hypertext Transfer Protocol)即超文本传输协议,是Web应用程序使用的协议,在Web浏览器和Web服务器之间传递HTML页面和数据。HTTP是基于TCP/IP协议来传输数据的,是一种无状态的协议。

关键特点:

支持客户/服务器模式:Web浏览器作为HTTP客户端通过URL向HTTP服务器发送HTTP请求,然后HTTP服务器会把HTTP响应返回给客户端;

简单快速:客户端向服务器请求时,只需要传递简单的HTTP请求,服务器响应时也只需要返回简单的HTTP响应就可以了。而HTTP协议通信速度快,适用于分布式环境下的基于Hypermedia的系统;

灵活:HTTP协议可以通过发送不同的请求方法、请求头等让服务器端做不同的处理;

无连接:客户端发送请求后,服务器端响应完该请求后就会断开连接。HTTP服务器端需要很短的时间维护每个连接,而且它并不对客户端发送请求的数量有所限制。这样就可以更快地响应用户的请求。

二、Python实现HTTP请求

  1. requests库
    requests库是Python实现HTTP请求的一个第三方库,它提供了一个更加简单的HTTP请求接口,简单易学,非常适合做Web测试和爬虫开发。

安装方法:

yaml 复制代码
pip install requests

使用方法:

python 复制代码
import requests

url = "http://www.baidu.com"
response = requests.get(url)
print(response.content.decode())

详细解释:

使用requests.get()函数发起GET请求,并将响应对象存储到response变量中;

调用响应对象的content属性获取响应内容的字节流数据,并使用decode()函数将其解码成字符串类型;

输出获取到的响应内容

  1. urllib库
    urllib库是Python自带的HTTP请求库,也是Python实现HTTP请求的一种基础方式,比较适合初学者学习使用。

使用方法:

python 复制代码
import urllib.request

url = "http://www.baidu.com"
response = urllib.request.urlopen(url)
print(response.read().decode())

详细解释:

使用urllib.request.urlopen()函数发起GET请求,并将响应对象存储到response变量中;

调用响应对象的read()函数获取响应内容的字节流数据,并使用decode()函数将其解码成字符串类型;

输出获取到的响应内容。

三、Python实现HTTP服务器

在Python中实现HTTP服务器,可以使用内置的http.server模块,它提供了HTTP协议的处理和解析。

  1. 简单示例
    下面是一个简单的例子,实现一个简单的HTTP服务器,可以根据请求的不同返回不同的响应内容:
python 复制代码
from http.server import SimpleHTTPRequestHandler, HTTPServer

class MyHTTPRequestHandler(SimpleHTTPRequestHandler):

    def do_GET(self):
        if self.path == '/':
            self.path = '/index.html'
        return SimpleHTTPRequestHandler.do_GET(self)

if __name__ == '__main__':
    server = HTTPServer(('', 8000), MyHTTPRequestHandler)
    print('Serving HTTP on localhost port 8000...')
    server.serve_forever()

详细解释:

创建一个继承自SimpleHTTPRequestHandler类的子类,并重写do_GET方法,通过判断请求路径来返回不同的响应内容;

在__main__函数中创建一个HTTPServer对象,指定服务器地址、端口和处理器;

调用HTTPServer对象的serve_forever方法,启动HTTP服务器,并指定服务状态一直保持运行。

  1. Flask框架示例
    下面是一个使用Flask框架实现HTTP服务器的示例:
python 复制代码
from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def home():
    return '<h1>Hello Flask!</h1>'

@app.route('/user/<name>')
def user(name):
    return f'<h1>Hello,{name}!</h1>'

详细解释:

导入Flask框架,创建一个Flask对象实例,并通过__name__参数指定当前模块的名称;

使用@app.route()装饰器来定义路由和视图函数,通过return语句返回响应内容;

调用Flask对象实例的run方法,启动HTTP服务器。

相关推荐
2301_809051147 小时前
Linux 网络编程 学习笔记
linux·网络·学习
风吹夏回8 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
小熊Coding8 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋99 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本9 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
田里的水稻9 小时前
OE_ubuntu26.04与宿主机之间复制粘贴内容
人工智能·python·机器人
星恒讯工业路由器10 小时前
Wi‑Fi DCM 双载波调制解析
网络·信息与通信·wifi7·wifi6·wi‑fi dcm 双载波调制
jiayong2310 小时前
02 创建虚拟环境
python
旺仔来了10 小时前
不联网的Linux下部署python环境
linux·开发语言·python
小江的记录本11 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试