2017-06-12 29 views
0

我成功地能够对我的JSON信息进行urlencode编码,但无法发布我的urlencoded信息,因为我需要在发布时进行身份验证。Python请求模块:验证并发布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,而我可以设置我的用户名和密码,那么我该如何对请求模块执行相同操作?

+1

您必须使用哪种验证方法? –

+0

@ArpitSolanki基本和摘要;他们都不工作,因为它仍然给我认证错误。我编辑了我的原始帖子。 – juiceb0xk

+0

@ juiceb0xk你得到的错误是什么?请注意,您正在'get'和'post'之间混合检查是否正确! – moritzg

回答

0

既然你提到的用户名和密码,验证方法是最有可能HTTP基本验证可与requests可以轻松完成这样的:

from requests.auth import HTTPBasicAuth 
requests.post('https://website.com/update/', auth=HTTPBasicAuth('user', 'pass')) 
+0

对不起,我编辑了我原来的帖子。我已经尝试了基本和摘要身份验证方法。两者都不起作用,因为它仍然给我一个认证错误。 – juiceb0xk

+0

requests.post和requests.get都不起作用。 – juiceb0xk

0

如果你的应用有某种前端的你已经可以使用浏览器访问,在Chrome上尝试开发者工具,看看如何完成身份验证(方法,参数)并尝试复制。

之后,您最有可能使用请求会话对象。这将帮助您仅验证一次,而不是验证每个请求。

http://docs.python-requests.org/en/v1.0.4/user/advanced/#session-objects

打开一个新的会话:

s = requests.Session()

使用会话做你的权威性;这只是一个例子,你可以做你的权威性但是您的应用支持(POST请求为例)

s.auth = ('user', 'pass')

如果您有任何会话设置(饼干,标题等),你必须将它们添加到你的会议。

s.headers.update({'x-test': 'true'})