Python +请求,我如何发送用户名和& POST中的密码?

时间:2015-10-21 12:40:13

标签: python python-requests

我正在使用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”:“登录失败。用户名或密码无效。”}

3 个答案:

答案 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'})