httplib2の接続から切断+おまけを説明する(Python3.6.1)

とにかく日本語情報が少ないhttplib2ですが、試行錯誤の末、何とか最低限の動作は把握できたので少し紹介したいと思います。

事前準備

pip install httplib2

接続から切断まで


import httplib2
import ssl
import socket
import traceback
def httplib2_connect():
h = httplib2.Http(cache="tmp/.cache", timeout=3)
target_url = "https://yahoo.co.jp"
resp_headers = ""
content = ""
try:
resp_headers, content = h.request(target_url, "GET")
except KeyError:
# URLが間違っている
pass
except httplib2.RelativeURIError:
# URLが絶対パスではない
pass
except FileNotFoundError:
# キャッシュが読み込めない(os.getch()で現在のディレクトリを確認汁)
pass
except ssl.CertificateError:
#  SSL証明書がおかしい
pass
except TimeoutError:
#  タイムアウト
pass
except socket.timeout:
#  タイムアウト
pass
except httplib2.ServerNotFoundError:
# サーバーが見つからない
pass
except:
# その他すべてのエラー受け取ってtracebackを出力
traceback.print_exc()
else:
# 接続出来たならHTTPステータスを表示
print(resp_headers.status)
finally:
# 明示的に切断(やらなくても平気)
# headers = {'connection': 'close'}
# resp, content = h.request(target_url, headers=headers)
return [resp_headers, content]
if __name__ == '__main__':
resp_headers, content =  httplib2_connect()

出力結果

200

ここまで理解するのにすげー時間かかってワロタwエラー起きすぎやろ!!

おまけ(lxml.htmlを使ってページタイトルを取得する)


import lxml.html
###
#上の関数httplib2_connect()を利用する
###
if __name__ == '__main__':
[resp_headers, content] = httplib2_connect()
raw_content = lxml.html.fromstring(content)
title = raw_content.xpath("//title/text()")[0]
print(title)
>>> 
Yahoo! JAPAN

終わり

公式にもあんまり情報載ってなくて大変でした…

教訓:あきらめなければ 何とかなるわ

入門 Python 3

入門 Python 3

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

コメントを残す

メールアドレスが公開されることはありません。