2010/05/01

"self.__class__"

クラス変数へのアクセス方法すら忘れていました
Python って何ですか? というレベルです
7.7 クラス定義
self.??? で良かったんですけどね

最初 method の外で定義されてるから何も付けずに OK かと思ったらダメで
ん〜、class って self.__class__ に入ってるな〜とか思って
調べてみたら
Python/codepiece/継承(2) - Glamenv-Septzen.net
ってページがひっかかったんですが、ここからリンクされてる
Effective Python Programming
が面白そうなんだけど長くて、あと少し古くて
最近の流行りとかもまとまってるの何かないかなぁ〜と思いました

でも初心者なのでこれ読むだけでも勉強になるに違いありません

2010/04/26

python octet

\110\145\154\154\157\054\040\127\157\162\154\144
ってあったらこれを string に直したいと思われるのではないでしょうか
私は思います
でもどうすればいいか直ぐには思いつきません
そこでグーグル先生に聴いてみました

octet string conversion
何か色々話されていますが斜めに読みます
コードしか読みません
>>> ''.join([chr(int(x,8)) for x in r'\110\145\154\154\157\054\040\127\157\162\154\144'.split('\\')[1:]])
'Hello, World'
あれ、なんかこれ、どっかの求人ので見たな
学習能力が無いようだ

python ssl

何か私、勘違いをしていたみたいでして
Python 2.6 だと ssl って module がありました
17.3. ssl — SSL wrapper for socket objects — Python v2.6.5 documentation
ssl.SSLSocket.getpeercert とかあるの

というわけで簡単にいじってみました
import socket
import ssl

sock = socket.socket()
ssl_sock = ssl.wrap_socket(sock)
ssl_sock.connect(('www.google.com', 443))
der = ssl_sock.getpeercert(binary_form=True)
print ssl.DER_cert_to_PEM_cert(der)
として実行してみると
$ python get_cert.py 
-----BEGIN CERTIFICATE-----
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x
MTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw
FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jN
gtXj9xVoRaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L
05vuuWciKh0R73mkszeK9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAM
BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl
LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF
BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw
Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0
ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF
AAOBgQCfQ89bxFApsb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5
u2ONgJd8IyAPkU0Wueru9G2Jysa9zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6
z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqAibAxWEEHXw==-----END CERTIFICATE-----

$
何だこの変な改行は
まぁ、動いた

あ、や、こんなことしなくても
ssl.get_server_certificate(("www.google.com", 443))
でいいのか

Python 2.6 だったらサーバー証明書取るだけならまぁいける
裏で動いてるのは OpenSSL だから OpenSSL は要るけど
うん、覚えておこう、っていうかもぉ、忘れられないわ