使用Python请求对相同URL进行身份验证的POST调用

时间:2016-04-28 22:41:14

标签: python authentication post python-requests session-cookies

我正在对以下URL的脚本进行POST调用(我的公司内部,因此无法从外部访问): https://opsdata.mycompany.com/scripts/finance/finance.exe

初始网站是一个html页面,其中包含供您输入数据的文本框,并且它具有对上述网址的后期操作。但是,它会重定向到登录页面,该页面也位于上面的URL,其中包含用户名和密码的文本框。我使用以下代码将数据提交到登录页面:

post_url_finance = 'https://opsdata.*****.com/scripts/finance/finance.exe'
s = requests.session()
s.auth = {'USER_NAME': '*****', 'PASSWORD': '*****'}
proxies = {'http': 'http://proxy-***.****.com'}

要进行身份验证,我正在使用:

pageCert = requests.post(post_url_finance, proxies=proxies, verify=False)  

这给了我一个答复:

<Response [200]>
C:\Python27\lib\site-packages\urllib3\connectionpool.py:768: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)

但是,我需要使用以下信息发送我要查询的数据:

values_finance = {'EMPLOYEE_TOTAL': '-----'}

当我第二次使用以下方式打电话时:

page = requests.post(post_url_finance, data=values_finance, proxies=proxies, verify=False) 

我得到了相同的回复。

<Response [200]>

如何第二次调用Post检索我想要的数据?

2 个答案:

答案 0 :(得分:0)

所有status_code=200意味着网站“成功呈现网页”很多时候网站可能无法使其无效的登录页面或错误页面返回任何其他内容

你需要看看pageCert.content ....我不认为你实际登录(也许你是)......在你第二次打电话时你需要做什么

page = s.post(url,...)

获取api数据你*可能想要使用json

page_data = s.post(url,...).json()

答案 1 :(得分:0)

我第一次看到这个东西但文档给了我一些指导......看起来你只是打印出响应而不是数据,有一个例子:

r = requests.get('https://www.google.com')
print(r)
# <response 200>
# Now if I write the text:
print(r.text)
# A lot of html comes out

正如@Joran Beasley所说,您可能需要使用print(r.json)来查看您的需求。在理想情况下,获取200响应代码是一件好事,否则如果身份验证失败,您将收到401/403错误。

该例外更多地与mycompany.com上的证书的真实性有关,可以在urlllib3文档中阅读。