pythonhttp认证
㈠ 如何验证在python SSL证书
importos
importglob
fromOpenSSL.SSLimportContext,TLSv1_METHOD,VERIFY_PEER,VERIFY_FAIL_IF_NO_PEER_CERT,OP_NO_SSLv2
fromOpenSSL.cryptoimportload_certificate,FILETYPE_PEM
fromtwisted.python.urlpathimportURLPath
fromtwisted.internet.sslimportContextFactory
fromtwisted.internetimportreactor
fromtwisted.web.clientimportgetPage
certificateAuthorityMap={}
forcertFileNameinglob.glob("/etc/ssl/certs/*.pem"):
#,solet'smakesureit'sreal.
ifos.path.exists(certFileName):
data=open(certFileName).read()
x509=load_certificate(FILETYPE_PEM,data)
digest=x509.digest('sha1')
#Now,de-.
certificateAuthorityMap[digest]=x509
(ContextFactory):
def__init__(self,hostname):
self.hostname=hostname
isClient=True
defgetContext(self):
ctx=Context(TLSv1_METHOD)
store=ctx.get_cert_store()
.values():
store.add_cert(value)
ctx.set_verify(VERIFY_PEER|VERIFY_FAIL_IF_NO_PEER_CERT,self.verifyHostname)
ctx.set_options(OP_NO_SSLv2)
returnctx
defverifyHostname(self,connection,x509,errno,depth,preverifyOK):
ifpreverifyOK:
ifself.hostname!=x509.get_subject().commonName:
returnFalse
returnpreverifyOK
defsecureGet(url):
returngetPage(url,HTTPSVerifyingContextFactory(URLPath.fromString(url).netloc))
defdone(result):
print'Done!',len(result)
secureGet("https://google.com/").addCallback(done)
reactor.run()
这个验证要安装Twisted 库。
当然这样的库好多,如:pycurl,requests,M2Crypto
importrequests
requests.get('https://somesite.com',cert='/path/server.crt',verify=True)
㈡ 如何实现python接口,的https
今天写代码时碰到一个问题,花了几个小时的时间google,基本上把google搜索的前几页内容都一一看了下,问题最终是解决了,不过过程挺曲折的,所以把这个过程记下来以便以后参考之。
原因是以下一段代码引起的:
?
12
import urllib2urllib2.urlopen('https://xxxx.com')
本来这段代码很简单的,就是请求一个https的连接,可是报以下错误:
?
1
urllib2.URLError:
第一反应是https证书问题产生的,如是以'python ssl' 为关键字google后,看到大家都在用'requests'这个python组件做http请求客户端,就像java里面的httpclient组件一样,如果安装完request包后,改成如下代码:
?
12
import requestsrequests.get('https://xxx.com')
还是报以下错误:
?
1
requests.exceptions.SSLError:
[Errno 1] _ssl.c:504: error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)
可以看出来,用requests和urllib2报的错误信息是一样,可见它们都是基于相同的底层api操作的,比如基于TLS的socket连接。到这里的时候我怀疑这个问题不是python代码写的有问题,可能是操作系统级别的设置错了。如下直接在shell客户端运行如下测试脚本:
?
1
wget
https://xxx.com
果然报如下错误:
?
12
OpenSSL:
error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)无法建立
SSL 连接。
到这里我怀疑是openssl安装有问题,更新到最新版本后还是一样,然后在浏览器里访问是可以的,所以应该不是openssl有问题。继续google.......,就发现有人也遇到过这种问题,说是连接SSL服务器时SSL的版本不对,如是用如下代码测试不同的SSL版本,看是不是这个问题:
?
12345
curl
-1 https://xxx.com curl
-2 https://xxx.com curl
-3 https://xxx.com
分别用上面的三句脚本去测试连接情况,发现第三种可以连接正常(-1,2,3,数字分别代码tlsv1,sslv2,sslv3三个不同的SSL版本)。说明这个https连接所在的服务器是基于SSLV3版本的。找到的问题,就很容易知道怎么改写python代码了。
?
123456789
class MyAdapter(HTTPAdapter): def init_poolmanager(self,
connections, maxsize): self.poolmanager= PoolManager(num_pools=connections, maxsize=maxsize, ssl_version=ssl.PROTOCOL_SSLv3) s= requests.Session()s.mount('https://',
MyAdapter())#所有的https连接都用ssl.PROTOCOL_SSLV3去连接s.get('https://xxx.com')
urllib2实现:
?#
custom HTTPS opener, banner's oracle 10g server supports SSLv3 onlyimport httplib,
ssl, urllib2, socketclass HTTPSConnectionV3(httplib.HTTPSConnection): def __init__(self,*args,**kwargs): httplib.HTTPSConnection.__init__(self,*args,**kwargs) def connect(self): sock= socket.create_connection((self.host,self.port),self.timeout) if self._tunnel_host: self.sock= sock self._tunnel() try: self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv3) except ssl.SSLError,
e: print("Trying
SSLv3.") self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv23) class HTTPSHandlerV3(urllib2.HTTPSHandler): def https_open(self,
req): return self.do_open(HTTPSConnectionV3,
req)#
install openerurllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3())) if __name__== "__main__": r= urllib2.urlopen("htANPROD1/bwskfcls.P_GetCrse") print(r.read())
可以看到这两种方案的原理都是一样,就是自定义连接处理器,改变连接时ssl的版本号。
㈢ python httplib 401 Unauthorized 因为需要验证用户名和密码所以出错了,怎么办能在代码中提交吗
self.url=..../login?inputUsername=admin&inputPassword=password' 。GET方法可以直接在url中携带发送的参数。
㈣ python的httplib.HTTPSConnection会验证客户端服务器的证书吗
默认是不认证的。下面是一个https登录的代码
host = "www.user.com"
headers = {}
headers['Cookie'] = "sid=4783c845-ec9d-4ec4-a163-b67c254b8c85"
url = "/login.htm"
params = {"code":"1111",
"password":"pwd",
"username":"user"}
params = urllib.urlencode(params)
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
req = urllib2.Request("https://" + host + url)
response = opener.open(req, params)
for item in cookie:
print item.value, item.name
㈤ 阿里云有python认证吗
目前阿里云的认证分为ACA 、 ACP、ACE,一般考取比较多的是ACP认证,题主所说的python是一种编程语言,唯一证明能力的只有“作品”,阿里云的ACP认证倒是可以了解看看,算是国内云计算行业的首出的证书了,一共分为4个方向,考取这个证书可以自学或者参加阿里云合作伙伴云顶云的认证培训,题主可以自行搜索了解一下吧
㈥ python认证证书有哪些
CDA大数据分析师,这是目前含金量较高的一个证书了
Python作为大数据分析的语言,CDA是它选择证书最好的代表了。
不过我个人也不是很建议你非要花一定的精力时间去考这样的一个证书。
在这一行业,大多公司看中的还是你的个人专业能力,如果你的专业能力达不到公司的需求,就算你考了10多个证书也不一定会得到重用。
实际操作能力远远大过证书证明。
你注意一下现在JAVA行业的招聘要求,对经验能力的要求和对证书的要求
经验少的,比如说刚入行的小白,刚入一年的,他们工资起步是多少?大概都在5K左右;两年的经验后,他们工资多少?8K左右;3年,经验、专业能力都很很足够了,这时候薪资差不多都上W了。且这种薪资的涨幅,并不会因为你有证书而格外考虑。
你有经常在招聘要求上看到学历要求,但有看到“含有xx证书”的要求吗?没有吧,因为在这一行业,更多的还是看你的专业能力。
所以建议你多积累经验,提升自己的技术为主。在自身精力充足的情况下,CDA也是可以考虑的。
这是一条来自#加米谷大数据-专注大数据人才培养#的小尾巴
㈦ python3怎么用urllib模块实现基本认证登录
你用2to3.py试过了么?
㈧ Python requests 关于3次身份认证怎么写
需要使用urllib2模块
import urllib2
#post的数据
url = ''
data = {
"ie": "",
"kw": "",
}
#post头部
headers = {
"Host": "",
"User-Agent": "",
"Cookie": ""
}
request = urllib2.Request(url, data, headers)
response = urllib2.urlopen(request)
data = response.read()
㈨ 获得python认证有什么好处
1.提升竞争力
经常面试的人会发现,当我们在填写个人信息时,往往会有一栏要求我们填写获得过的证书。因为企业会将你有无证书以及证书的含金量作为一个考量条件,选择持证人员的概率也会更大。
2.获得更高薪水
研究表明,有证书的开发人员比没有证书的开发人员收入更高。企业无法知道无证人员在Python上花了多少时间。但企业可以肯定的是,已经获得证书的人一定是花过很多时间钻研python,才通过认证的。这也使获得Python编程认证的人能在一群应聘者中脱颖而出。而且,很多客户会要求经过认证的专业人员来负责他们的项目。因此,公司也会重用这样的员工,自然也会给他们加薪。
3.社交人群升级
当你的能力被正规机构认可后,你会发现,你能认识更多的专业人士。有些已经开始从事Python开发方面工作的人,还能给你的未来职业规划提出建议,甚至会给你介绍适合你的工作。