Operation KiWi

一生使える言語はPythonだと信じてる

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を使ってページタイトルを取得する)

pip install lxml
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にやらせよう ―ノンプログラマーにもできる自動化処理プログラミング