我成功地能够对我的JSON信息进行urlencode,但是我无法发布我的urlencoded信息,因为我需要在发布时进行身份验证。
我该怎么做?
我的代码如下:
import urllib
import pycurl
import certifi
import json
import requests
from requests.auth import HTTPBasicAuth
requests.post('https://website.com/update/', auth=('user', 'pass'))
uri = 'https://website.com/update/'
params = {}
data= {"simId":760590802,"changeType":2,"targetValue":000307,"effectiveDate":'null'}
params["data"] = json.dumps(data)
r = requests.post(uri, data=params)
print r.text
如您所见,我可以发布我的信息。但在这样做之后,我需要在完全这样做之前对自己进行身份验证。
我浏览了请求模块身份验证页面,但这些身份验证方法都不起作用。这适用于pycurl,而我可以设置我的用户名和密码,那么我如何对请求模块做同样的事情呢?
答案 0 :(得分:0)
由于您提到了用户名和密码,因此身份验证方法很可能是 HTTP基本身份验证,这可以通过@Test(expected = TransientDataAccessResourceException.class)
public void readOnlyTransactionAttribute() {
testUserService.getAll();
}
轻松完成,如下所示:
requests
答案 1 :(得分:0)
如果您的应用程序有某种前端,您已经可以使用浏览器访问,请尝试使用Chrome上的开发人员工具查看身份验证的执行方式(方法,参数)并尝试复制该文件。
之后您很可能会使用请求会话对象。这将帮助您只进行一次身份验证,而不是每次发出请求。
http://docs.python-requests.org/en/v1.0.4/user/advanced/#session-objects
打开一个新会话:
s = requests.Session()
使用会话进行身份验证;这只是一个示例,您可以执行您的身份验证,但您的应用程序支持(例如,发布请求)
s.auth = ('user', 'pass')
如果您有任何会话设置(Cookie,标题等),则必须将它们添加到您的会话中。
s.headers.update({'x-test': 'true'})