我正在使用我公司的互联网,我需要访问一个网页来删除它的数据。我正在使用Python Requests模块。我需要访问的页面是通过POST请求完成的。我的公司有代理。我可以使用requests.post()中的proxies标志来完成代理。但是,有一个使用cookie的身份验证部分,我似乎无法通过它。使用POST请求时,我该如何进行身份验证?
我正在尝试使用此主题中描述的身份验证过程,但它无法正常工作: Authentication and python Requests
代码以这种方式设置:
import ssl
from MyHtmlParser import MyHTMLParser
from lxml import html
import requests
from bs4 import BeautifulSoup as bs
def authenticate(s, url):
headers = {'USER_NAME': 'me', 'PASSWORD': 'mypassword', '_Id': 'submit'}
page=s.get(url)
soup=bs(page.content)
value=soup.form.find_all('input')[2]['value']
headers.update({'value_name':value})
auth = s.post(url, params=headers, cookies=page.cookies)
post_url_finance = 'https://opsdata<company>com/scripts/finance/finance.exe'
values_finance = {'EMPLOYEE_TOTAL': 'employeeId'}
proxies = {'http': 'http://proxy-<company>.com'}
page = requests.post(post_url_finance, data=values_finance, proxies=proxies) print page.content
但是,我收到了这个错误:
$ python postUsingRequests.py
Traceback (most recent call last):
File "postUsingRequests.py", line 53, in <module>
page = requests.post(post_url_finance, data=values_finance, proxies=proxies)
File "C:\Python27\lib\site-packages\requests\api.py", line 109, in post
return request('post', url, data=data, json=json, **kwargs)
File "C:\Python27\lib\site-packages\requests\api.py", line 50, in request
response = session.request(method=method, url=url, **kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python27\lib\site-packages\requests\sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "C:\Python27\lib\site-packages\requests\adapters.py", line 431, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
答案 0 :(得分:0)
您遇到的问题似乎是由不受信任的SSL证书引起的。
最快的解决方法是设置verify=False
。请注意,这将导致证书无法验证,并使您的应用程序面临安全风险。但正如你所说,它在一个安全的网络中运行,所以这不是一个严重的问题。
答案 1 :(得分:0)
s = requests.session()
s.auth = {'USER_NAME': '----', 'PASSWORD': '----'}
pageCert = requests.post(post_url_finance, proxies=proxies, verify=False)
我使用了s.auth和verify = False。这给了我回复,而不是给我SSL错误。