##
22 例

以下の例では、 python.org のメインページを取得して、その最初の 100 バイト分を表示します:

    >>> import urllib2
    >>> f = urllib2.urlopen('http://www.python.org/')
    >>> print f.read(100)
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <?xml-stylesheet href="./css/ht2html

今度は CGI の標準入力にデータストリームを送信し、CGI が返すデータ を読み出します:

    >>> import urllib2
    >>> req = urllib2.Request(url='https://localhost/cgi-bin/test.cgi',
    ...                       data='This data is passed to stdin of the CGI')
    >>> f = urllib2.urlopen(req)
    >>> print f.read()
    Got Data: "This data is passed to stdin of the CGI"

上の例で使われているサンプルの CGI は以下のようになっています:

    #!/usr/bin/env python
    import sys
    data = sys.stdin.read()
    print 'Content-type: text-plain\n\nGot Data: "%s"' % data

以下はベーシック HTTP 認証の例です:

    import urllib2
    # ベーシック HTTP 認証をサポートする OpenerDirector を作成する...
    auth_handler = urllib2.HTTPBasicAuthHandler()
    auth_handler.add_password('realm', 'host', 'username', 'password')
    opener = urllib2.build_opener(auth_handler)
    # ...urlopen から利用できるよう、グローバルにインストールする
    urllib2.install_opener(opener)
    urllib2.urlopen('http://www.example.com/login.html')

`build_opener()` はデフォルトで沢山のハンドラを提供しており、 その中に`ProxyHandler` があります。デフォルトでは、 `ProxyHandler` は`<scheme>_proxy` という環境変数を使います。 ここで`<scheme>` は URL スキームです。例えば、 HTTP プロキシの URL を得るには、環境変数http_proxy を読み出します。

この例では、デフォルトの `ProxyHandler` を置き換えて プログラム的に作成したプロキシ URL を使うようにし、 `ProxyBasicAuthHandler` でプロキシ認証サポートを追加します。

    proxy_handler = urllib2.ProxyHandler({'http': 'http://www.example.com:3128/'})
    proxy_auth_handler = urllib2.HTTPBasicAuthHandler()
    proxy_auth_handler.add_password('realm', 'host', 'username', 'password')

    opener = build_opener(proxy_handler, proxy_auth_handler)
    # 今回は OpenerDirector をインストールするのではなく直接使います:
    opener.open('http://www.example.com/login.html')

以下は HTTP ヘッダを追加する例です:

headers 引数を使って`Request` コンストラクタを呼び出す方法 の他に、以下のようにできます:

    import urllib2
    req = urllib2.Request('http://www.example.com/')
    req.add_header('Referer', 'http://www.python.org/')
    r = urllib2.urlopen(req)

`OpenerDirector` は全ての `Request` に User-Agent: ヘッダを自動的に追加します。これを変更するには:

    import urllib2
    opener = urllib2.build_opener()
    opener.addheaders = [('User-agent', 'Mozilla/5.0')]
    opener.open('http://www.example.com/')

のようにします。

また、`Request` が`urlopen()` (や `OpenerDirector.open()`) に渡される際には、いくつかの標準ヘッダ (Content-Length:, Content-Type: および Host:) も追加されることを忘れないでください。