httplib模块:(一个相对底层的http请求模块)
httplib是一个相对底层的http请求模块,期上有专门的包装模块,如urllib内建模块,goto第三方模块,但是封装的越高就约不灵活,比如urllib模块里的请求错误是就不会返回结果页的内容,只有头信息.对于某些需要检测错误请求返回值得场景就不适用,所以就用到这个模块了
1.class httplib.HTTPConnection
说明:该类用于创建一个http类的请求连接
原型:
HTTPConnection(host[prot[strict[timeout]]])
host请求不允许带http://开头
port:服务器web端口
strict:是否严格检查请求状态行,就是http1.0/1.1协议版本,即请求的第一行,默认为false,为ture是检查错误会抛出异常
timeout:单次请求的超时时间,没有默认使用httplib模块内的全局超时时间
import httplib2
print(httplib2.HTTPConnectionWithTimeout("www.baidu.com:8080"))
print(httplib2.HTTPConnectionWithTimeout("www.baidu.com",))
# 以下这个是错误实例
print(httplib2.HTTPConnectionWithTimeout("www.baidu.com",,True,))
2.class httplib.HTTPSCconnection
说明:
该类用于创建一个https类型的连接
原型:HTTPSConnection(host[port[key_file[cert_file[strict[timeout]]]]])
key_file:一个包含pem格式的私钥文件
cert_file:一个包含PEM格式的认证文件
other:其他同http参数
print(conn3 = httplib2.HTTPSConnectionWithTimeout('accounts.google.com',443,key_file,cert_file,True,10))
返回:HTTPSConnection对象
注意:要创建https链接,必须要保证底层的socket模块是支持ssl的编译模式,即编译时ssl选项的开关是开着的
3.HTTPConnection对象request方法:
说明:
发送一个请求
原型:
conn.request(method,url[body[headers]])
method:请求方式 如'get','POST','HEAD','PUT','DELET'等
url:请求的网页路径,如:'/index.html'
body:请求是否带数据,该参数是一个字典
headers:请求是否带有信息,该参数是一个字典,不过键的名字是指定的http头关键字
实例:
conn.request('GET', '/', '', {'user-agent':'test'})
返回:
无返回,其实就是相对于向服务其发送数据,但是没有最后回车
HTTPConnection对象getresponse方法
说明:
获取一个http响应对象,相当于执行最后的2个回车
res = conn.getresponse()
返回:
HTTPResponse对象
HTTPConnection对象close()方法
说明:
关闭指定的httpconnect链接
conn.close()
6、HTTPResponse对象read方法
说明:
获得http响应的内容部分,即网页源码
原型:
body = res.read([amt])
amt: 读取指定长度的字符,默认为空,即读取所有内容
body = res.read()
pbody = res.read(10)
返回:
网页内容字符串
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
总体实例:
#!/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()
httplib模块:(一个相对底层的http请求模块)的更多相关文章
- Django(48)drf请求模块源码分析
前言 APIView中的dispatch是整个请求生命过程的核心方法,包含了请求模块,权限验证,异常模块和响应模块,我们先来介绍请求模块 请求模块:request对象 源码入口 APIView类中di ...
- iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)
一.推荐关注模块(一个控制器控制两个tableView) -- 数据的显示 刚开始加载数据值得注意的有以下几点 导航控制器会自动调整scrollView的contentInset,最好是取消系统的设置 ...
- Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 ...
- python 多线程,tthread模块比较底层,而threading模块是对thread做了一些包装,multithreading
Python多线程详解 2016/05/10 · 基础知识 · 1 评论· 多线程 分享到:20 本文作者: 伯乐在线 - 王海波 .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 1.多线程的 ...
- django-rest-framework-源码解析002-序列化/请求模块/响应模块/异常处理模块/渲染模块/十大接口
简介 当我们使用django-rest-framework框架时, 项目必定是前后端分离的, 那么前后端进行数据交互时, 常见的数据类型就是xml和json(现在主流的是json), 这里就需要我们d ...
- 爬虫模块介绍--request(发送请求模块)
爬虫:可见即可爬 # 每个网站都有爬虫协议 基础爬虫需要使用到的三个模块 requests 模块 # 模拟发请求的模块 PS:python原来有两个模块urllib和urllib的升级urlli ...
- IIS7/8下提示 HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求
IIS7的设置和IIS6有很多不同之处,这里提到的的是一个上传附件大小设置的问题. HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 原因:Web ...
- SeaJS:一个适用于 Web 浏览器端的模块加载器
什么是SeaJS?SeaJS是一款适用于Web浏览器端的模块加载器,它同时又与Node兼容.在SeaJS的世界里,一个文件就是一个模块,所有模块都遵循CMD(Common Module Definit ...
- requests(一): 发送一个json格式的post请求
今天给一位同学解决post发送数据格式为json格式的请求,顺便确认一下问题归属. 背景: 用postman工具发送一个数据格式为json的请求,得到了服务器的响应. 用python的requests ...
随机推荐
- python-*args、**kargs用法
可变位置参数: *args:是一个元组,传入的参数会被放进元组里.可变关键字参数: **kwargs:是一个字典,传入的参数以键值对的形式存放到字典里. def test1(*args): print ...
- JavaScript算数运算符和一元运算符
算数运算符 加法运算符(Addition): x + y 减法运算符(Subtraction): x - y 乘法运算符(Multiplication): x * y 除法运算符(Division): ...
- 【PowerOJ1753&网络流24题】分配问题(KM)
题意: 思路:费用流可做 最好的算法是KM板子 #include<bits/stdc++.h> using namespace std; typedef long long ll; typ ...
- YJJ's Salesman
YJJ's Salesman YJJ is a salesman who has traveled through western country. YJJ is always on journey. ...
- UVALive 6859 Points (凸包)
Points 题目链接: http://acm.hust.edu.cn/vjudge/contest/130303#problem/E Description http://7xjob4.com1.z ...
- 2.Vue子组件给父组件通信
子组件给父组件通信 如果子组件想要改变数据呢?这在vue中是不允许的,因为vue只允许单向数据传递,这时候我们可以通过触发事件来通知父组件改变数据,从而达到改变子组件数据的目的 子组件: <te ...
- JS-Proxy
Proxy 对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等). 参考:Proxy - JavaScript | MDN 语法: let p = new Proxy(target, ...
- Vultr CentOS下后台跑node
在Mac或者Windows下简直易如反掌.几行命令搞定的事情,但因为使用的是远程SSH连接纯命令行处理,所以需要记录下来怎么弄. 比如, 1. 怎么在什么都没有的CentOS里下载Node安装包? 2 ...
- plsql汉化后,表格列注释中文显示成?号
- unittest框架扩展(自动生成用例)自动化-上
一.思想: 基于数据驱动和代码驱动结合的自动化测试框架. 二.自动化测试框架步骤: 1.获取用例,用例格式:.ymal 2.调用接口 3.校验结果 4.发送测试报告 5.异常处理 6.日志模块 三.基 ...