##############################
# 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()