在进行接口测试的时候,有些需要发送post请求。先了解一些基本概念。
1.Http请求
HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST
2. Get和Post的主要区别
(1) 在客户端,Get方式通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
(2) GET方式提交的数据最多只能有1024字节,而POST则没有此限制
3.如何使用python发送post请求
一般步骤:
-
了解请求的url和参数
-
使用urlencode对参数进行url编码
-
生成Request对象
-
Open 这个Request对象
举例:
org_name = "henry_test"
org_psw = "XXXXX"
login_url = "http://passport.ablesky-a.com:8080/passport/login.do"#请求的url
para = {
'j_username':org_name,
'j_password':org_psw,
}#参数为用户名和密码
post_data = urllib.urlencode(para)#进行url编码
req = urllib2.Request(login_url,post_data)#生成Request对象
resp = urllib2.urlopen(req)#open it
file=resp.read()#读出返回结果
print file #打印出返回结果
4.可能会遇到的问题
1.返回结果{"message":"Referer is null
","success":false}
HTTP
Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
解决:手动添加referer,在open这个request前,将referer加入header中
req.add_header('Referer','http://www.ablesky-a.com:8080/')
2.有些请求需要登录信息怎么办?
解决方式:使用CookieJar()来自动管理Cookie
cj
= cookielib.CookieJar()
opener =
urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
org_name =
"henry_test"
org_pwd =
"xxxxxx"
login_url =
"http://passport.ablesky-a.com:8080/passport/login.do"
para = {
'j_username':org_name,
'j_password':org_pwd,
}
post_para =
urllib.urlencode(para)
opener.addheaders = [('Referer',
'http://www.ablesky-a.com:8080/')]
resp =
opener.open(login_url, post_para)
file =
resp.read()
方式和第一种基本相同,就是使用了一个opener,用它发了登录的请求后,cookie信息会自动保存,所以之后需要登录信息才能发的请求只要直接用这个openner
open就可以了。
加载中,请稍候......