PythonでHTTP通信を行う

##############################
# GETでHTTP通信して、Yahooのトップページを引いてくる
import http.client

conn = http.client.HTTPConnection( "www.yahoo.co.jp" )
conn.request( "GET", "/" )
res = conn.getresponse()
# レスポンスコードの表示
print(response.status, response.reason)
  #=> 200 OK
# 結果はbitesで返ってくるので、文字列として扱う場合はdecodeする
print( res.readall().decode( "UTF-8" ) )
conn.close()

##############################
# POSTでHTTP通信してみる
import http.client
import urllib.parse

# うちのサイトにある、keyというキー名に対応するvalueを表示するだけのページを呼ぶ
host = "www.mwsoft.jp"
path = "/programming/python/sakura/http_request_post_test.py"
params = urllib.parse.urlencode( { "key": "val" } )

conn = http.client.HTTPConnection( host )
conn.request( "POST", path, params )
res = conn.getresponse()
print( res.readall().decode( "UTF-8" ) )
  #=> val
conn.close()

##############################
# サイズを指定してbodyを取得
import http.client

conn = http.client.HTTPConnection( "www.mwsoft.jp" )
conn.request( "GET", "/" )
res = conn.getresponse()

# 80byteずつ細かく取得してみる
while True:
    buf = res.read( 80 )
    if not buf:
        break
    print( buf )

conn.close()

##############################
# レスポンスヘッダとかいろいろ取得してみる
import http.client

conn = http.client.HTTPConnection( "www.mwsoft.jp" )
conn.request( "GET", "/" )
res = conn.getresponse()

# レスポンスコード
print( res.getcode() )
  #=> 200
print( res.status )
  #=> 200

# reason
print( res.reason )
  #=> OK

# バージョン
print( res.version )
  #=> 11

# ヘッダから情報を取得する(2つ目の引数はデフォルト値)
print( res.getheader("Last-Modified", "") )
  #=> Sat, 12 Dec 2009 06:45:19 GMT
print( res.getheader("Content-Length", -1) )
  #=> 3615

# ヘッダの全情報を衆徳する
for header in res.getheaders():
    print( header[0] + ", " + header[1] )
  #=> Date, Sun, 27 Dec 2009 13:18:57 GMT
  #=> Server, Apache/1.3.41 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
  #=> Last-Modified, Sat, 12 Dec 2009 06:45:19 GMT
  #=> ETag, "e1f-4b233bff"
  #=> Accept-Ranges, bytes
  #=> Content-Length, 3615
  #=> Content-Type, text/html

# HTTPMessageクラスが返る
msg = res.msg
print( msg.as_string() )
  #=> Date: Sun, 27 Dec 2009 13:05:00 GMT
  #=> Server: Apache/1.3.41 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
  #=> Last-Modified: Sat, 12 Dec 2009 06:45:19 GMT
  #=> ETag: "e1f-4b233bff"
  #=> Accept-Ranges: bytes
  #=> Content-Length: 3615
  #=> Content-Type: text/html

for key in msg.keys():
    print( key + ", " + msg.get( key ) )
  #=> Date, Sun, 27 Dec 2009 13:13:59 GMT
  #=> Server, Apache/1.3.41 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8e
  #=> Last-Modified, Sat, 12 Dec 2009 06:45:19 GMT
  #=> ETag, "e1f-4b233bff"
  #=> Accept-Ranges, bytes
  #=> Content-Length, 3615
  #=> Content-Type, text/html

conn.close()

戻る    ご意見、ご要望