python--httplib模块的使用

本文详细介绍了httplib模块的使用方法,包括HTTPConnection和HTTPSConnection类的创建,HTTP请求方法request的发送,获取响应对象getresponse,以及处理HTTPResponse对象的方法和属性。通过实例展示了如何进行HTTP请求及解析响应内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

httplib是一个相对底层的http请求模块,其上有专门的包装模块,如urllib内建模块,goto等第三方模块,但是封装的越高就越不灵活,比如urllib模块里请求错误时就不会返回结果页的内容,只有头信息,对于某些需要检测错误请求返回值的场景就不适用,所以就得用这个模块了。


1、class httplib.HTTPConnection

说明:
该类用于创建一个http类型的请求链接

原型:
HTTPConnection(host[, port[, strict[, timeout]]])
host: 请求的服务器host,不能带http://开头
port: 服务器web服务端口
strict: 是否严格检查请求的状态行,就是http1.0/1.1 协议版本的那一行,即请求的第一行,默认为False,为True时检查错误会抛异常
timeout: 单次请求的超时时间,没有时默认使用httplib模块内的全局的超时时间

<span style="font-family:Microsoft YaHei;">    实例:  
    conn1 = HTTPConnection('www.baidu.com:80')  
    conn2 = HTTPconnection('www.baidu.com',80)  
    conn3 = HTTPConnection('www.baidu.com',80,True,10)  
    错误实例:  
    conn3 = HTTPConnection('www.baidu.com:80',True,10)  </span>


返回:

HTTPConnection类会实例并返回一个HTTPConnection对象


2、class httplib.HTTPSConnection
说明:
该类用于创建一个https类型的请求链接

原型:
HTTPSConnection(host[, port[, key_file[, cert_file[, strict[, timeout]]]]])
key_file:一个包含PEM格式的私钥文件
cert_file:一个包含PEM格式的认证文件
other:其它同http参数

实例:

<span style="font-family:Microsoft YaHei;">    conn3 = HTTPSConnection('accounts.google.com',443,key_file,cert_file,True,10)  </span>


返回:
同样返回一个HTTPSConnection对象

注意:
要创建https链接,必须要保证底层的socket模块是支持ssl的编译模式,即编译时ssl选项的开关是开着的


3、HTTPConnection对象request方法:
说明:
发送一个请求

原型:
conn.request(method, url[, body[, headers]])
method: 请求的方式,如'GET','POST','HEAD','PUT','DELETE'等
url: 请求的网页路径。如:'/index.html'
body: 请求是否带数据,该参数是一个字典
headers: 请求是否带头信息,该参数是一个字典,不过键的名字是指定的http头关键字

实例:

<span style="font-family:Microsoft YaHei;">    conn.request('GET', '/', '', {'user-agent':'test'})  </span>


返回:

无返回,其实就是相对于向服务其发送数据,但是没有最后回车


4、HTTPConnection对象getresponse方法
说明:
获取一个http响应对象,相当于执行最后的2个回车

原型/实例:

<span style="font-family:Microsoft YaHei;">res = conn.getresponse()  </span>


返回:
HTTPResponse对象


5、HTTPConnection对象close()方法
说明:
关闭指定的httpconnect链接

实例

<span style="font-family:Microsoft YaHei;">conn.close()  </span>


6、HTTPResponse对象read方法
说明:
获得http响应的内容部分,即网页源码

原型:
body = res.read([amt])
amt: 读取指定长度的字符,默认为空,即读取所有内容

实例:

<span style="font-family:Microsoft YaHei;">    body = res.read()  
    pbody = res.read(10)  </span>


返回:

网页内容字符串


7、HTTPResponse对象的其它方法或属性
方法:
getheaders()
获得所有的响应头内容,是一个元组列表[(name,value),(name2,value2)]
getheader(name[,default])
获得指定的头内容
fileno()
socket的fileno

属性:
msg
所有的头信息,和getheaders方法一样,只不过这个是原始未处理的字符串
status
当次请求的状态
version
当次请求的http协议版本,10是http1.0, 11是http/1.1
reason
当次请求的结果的表述内容,200是ok,404是Not Found


总体实例:

<span style="font-family:Microsoft YaHei;">#!/usr/bin/env python    
# -*- coding: utf-8 -*-    
import httplib  
import urllib  
  
def sendhttp():  
    data = urllib.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})     
    headers = {"Content-type": "application/x-www-form-urlencoded",  
               "Accept": "text/plain"}  
    conn = httplib.HTTPConnection('bugs.python.org')  
    conn.request('POST', '/', data, headers)  
    httpres = conn.getresponse()  
    print httpres.status  
    print httpres.reason  
    print httpres.read()             
                
if __name__ == '__main__':    
    sendhttp()   </span>


### Ansible 2.9.3-1.el7 的依赖关系及提供者 Ansible 是一种简单而强大的自动化工具,用于配置管理、应用部署以及任务编排。对于版本 `Ansible 2.9.3-1.el7`,其依赖项主要由 RPM 包管理系统定义,并基于 CentOS 或 RHEL 7 平台上的软件仓库解析。 以下是该版本的主要依赖项及其可能的提供者: #### 主要依赖项 1. **Python >= 2.6**: Python 解释器是运行 Ansible 所必需的核心组件[^1]。 - 提供者:`python27` 或更高版本 (具体取决于操作系统中的默认安装)。 2. **Jinja2 >= 2.8**: Jinja2 是一个现代且功能丰富的模板引擎,广泛应用于 Ansible 中的任务和 Playbook 定义文件中[^2]。 - 提供者:通过 `python-jinja2` RPM 包实现支持。 3. **PyYAML**: PyYAML 库负责 YAML 文件的解析与序列化操作,在处理 Ansible 配置文件时至关重要[^3]。 - 提供者:RPM 包名为 `pyyaml` 或类似的变体名称。 4. **paramiko`: Paramiko 是 SSHv2 协议的一个纯 Python 实现,它使得远程服务器连接变得容易并安全[^4]。 - 提供者:通常来自 `python-paramiko` 软件包。 5. **setuptools`: Setuptools 是 Python 开发环境下的构建工具集之一,帮助完成模块打包等工作流程[^5]。 - 提供者:对应于 `python-setuptools` 这一标准库集合。 6. **cryptography`: Cryptography 提供低级加密原语访问接口,增强数据传输安全性[^6]。 - 提供者:一般情况下会预装有 `python-cryptography`. 7. **six`: Six 模块兼容 Python 2 和 Python 3 编程风格差异问题解决方案[^7]。 - 提供者:可通过 `python-six` 获取相应资源。 8. **selinux-python`: SELinux 政策绑定到 Python API 上面以便更好地控制 Linux 系统权限分配机制[^8]。 - 提供者:如果启用了强制模式,则需额外引入此扩展特性;否则可选忽略不计。 以上列举的是典型场景下所需的直接关联项目清单,实际环境中还可能存在其他间接性的子需求链路情况发生改变的可能性存在,请参照官方文档或者本地 Yum/DNF 查询命令进一步确认最终状态信息详情如下所示: ```bash $ repoquery --requires ansible-2.9.3-1.el7.noarch | sort | uniq ``` 上述脚本能够有效展示目标程序所声明的一切外部条件约束列表形式呈现出来便于后续分析判断工作开展顺利推进下去。 ```python import subprocess def get_ansible_dependencies(package_name="ansible-2.9.3-1.el7"): try: result = subprocess.run( ["repoquery", "--requires", package_name], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) dependencies = sorted(set(result.stdout.splitlines())) return "\n".join(dependencies) except Exception as e: return f"Error occurred: {e}" print(get_ansible_dependencies()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值