我正在使用python +请求与qTest REST API集成。我在登录过程的第一步有问题。
我需要创建一个看起来像这样的POST按摩:
POST /api/login
Host: nephele.qtestnet.com
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
j_username= maxmccloud%40qasymphony.com&j_password=p@ssw0rd
我在python上做了这个:
r = requests.post("http://indegy.qtestnet.com/api/login",data="j_username= maxmccloud%40qasymphony.com&j_password=p@ssw0rd")
print r.text
但是,当我运行它时,它说:
{“message”:“登录失败。用户名或密码无效。”}
答案 0 :(得分:4)
只需将字典中的用户名和密码传递给data
参数即可;然后requests
将为您编码信息。使用未编码的数据,因此请使用@
代替%40
,例如:
data = {
'j_username': 'maxmccloud@qasymphony.com',
'j_password': 'p@ssw0rd'
}
response = requests.post(
'http://indegy.qtestnet.com/api/login',
data=data
)
requests
然后会对字典进行编码,并将Content-Type
标题设置为application/x-www-form-urlencoded
。
请参阅快速入门文档中的More complicated POST requests section。
答案 1 :(得分:0)
尝试:
import urllib
r = requests.post("http://indegy.qtestnet.com/api/login",data=urllib.urlencode({'j_username': 'maxmccloud@qasymphony.com', 'j_password': 'p@ssw0rd'}))
print r.text
您应该使用urllib
模块的urlencode
方法创建一个数据字典,然后使用r = requests.post("http://indegy.qtestnet.com/api/login",data={'j_username': 'maxmccloud@qasymphony.com', 'j_password': 'p@ssw0rd'})
print r.text
模块private static final String HREF_PATTERN =
"\\s*(?i)href\\s*=\\s*(\"([^\"]*\")|'[^']*'|([^'\">\\s]+))";
方法对其进行编码,而不是自己对您发送到服务器的数据进行urlencoding。
编辑:
正如@Martijn建议的那样,请求会对urlencoding进行自我编码,因此您只能这样做:
<a href=www.example.com/1234 5678>
答案 2 :(得分:0)
试试这个
r = requests.post("http://indegy.qtestnet.com/api/login",data={'j_username': 'maxmccloud@qasymphony.com', 'j_password': 'p@ssw0rd'})