pythonpost与get请求参数_python用httplib模块和发送get和post请求

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模块内的全局的超时时间实例:

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)

2、class httplib.HTTPSConnection

说明:

该类用于创建一个https类型的请求链接

原型:

HTTPSConnection(host[, port[, key_file[, cert_file[, strict[, timeout]]]]])

key_file:一个包含PEM格式的私钥文件

cert_file:一个包含PEM格式的认证文件

other:其它同http参数

实例:conn3 = HTTPSConnection('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','DELETE'等

url: 请求的网页路径。如:'/index.html'

body: 请求是否带数据,该参数是一个字典

headers: 请求是否带头信息,该参数是一个字典,不过键的名字是指定的http头关键字

实例:conn.request('GET', '/', '', {'user-agent':'test'})

返回:

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

4、HTTPConnection对象getresponse方法

说明:

获取一个http响应对象,相当于执行最后的2个回车

原型/实例:res = conn.getresponse()

返回:

HTTPResponse对象

5、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

综合应用:

在python中,模拟http客户端发送get和post请求,主要用httplib模块的功能。

1、python发送GET请求

我在本地建立一个测试环境,test.php的内容就是输出一句话:<?php

echo 'Old friends and old wines are best.';

?>

python发送get请求代码:#!/usr/bin/env python

#coding=utf8

import httplib

httpClient = None

try:

httpClient = httplib.HTTPConnection('localhost', 80, timeout=30)

httpClient.request('GET', '/test.php')

#response是HTTPResponse对象

response = httpClient.getresponse()

print response.status #获取状态码

print response.reason #获取是否成功 ok?

print response.read()

except Exception, e:

print e

finally:

if httpClient:

httpClient.close()

上面代码中使用了finally来保证即使出错的时候也能关闭httpClient。运行这个程序,在我的电脑上输出结果如下:[root@China httplib]# python get.py

200

OK

Old friends and old wines are best.

2、python发送POST请求

修改test.php内容,打印出$_POST数组:<?php  var_dump($_POST);?>

python发起post请求代码:#!/usr/bin/env python

#coding=utf8

import httplib, urllib

httpClient = None

try:

params = urllib.urlencode({'name': 'tom', 'age': 22})

headers = {"Content-type": "application/x-www-form-urlencoded"

, "Accept": "text/plain"}

httpClient = httplib.HTTPConnection("localhost", 80, timeout=30)

httpClient.request("POST", "/test.php", params, headers)

response = httpClient.getresponse()

print response.status #获取状态码

print response.reason #获取是否成功

print response.read()

print response.getheaders() #获取头信息

except Exception, e:

print e

finally:

if httpClient:

httpClient.close()

运行代码,在我的电脑上输出如下:[root@China httplib]# python post.py

200

OK

array(2) {

["age"]=>

string(2) "22"

["name"]=>

string(3) "tom"

}

[('content-length', '73'), ('x-powered-by', 'PHP/5.3.3'), ('server', 'Apache/2.2.15 (CentOS)'), ('connection', 'close'), ('date', 'Sat, 26 Aug 2017 15:10:39 GMT'), ('content-type', 'text/html; charset=UTF-8')]

[root@China httplib]#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值