LoginSignup
3
6

More than 5 years have passed since last update.

Pythonで実装する簡単なHTTPクライアント

Posted at

概要

Pythonの練習がてら作った簡単なHTTPクライアント

環境

Python 3.4.3

使い方

コマンドがpython3になってる人は適宜読み替えてください

$python http1.0.py 'ipアドレス' '返ってきたhtmlを保存するファイル名'

補足

ヘッダーの読み飛ばしを記述するのが面倒だったので、とりあえず全部読み込んであとから改行が2連続の部分を前から検索してスライスで切り落としました。
例外はとりあえず全部キャッチするスタイルでやってます。

ソースコード

http1.0.py
import socket
import sys
import traceback

def main():
    #Set max buffer size
    max_size = 8192

    argv = sys.argv
    argc = len(argv)

    #Check commandline parameter
    if(argc != 3):
        sys.stderr.write('Usage: python http1.0.py [ADDRESS] [FILE]\nor\n')
        sys.stderr.write('Usage: python3 http1.0.py [ADDRESS] [FILE]\n')
        exit()

    address = (argv[1], 80)
    filename = argv[2]

    try:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    #Create socket
        client.connect(address)    #Connect
        client.sendall(b'GET / HTTP/1.0\r\n\r\n')    #Send GET command
        data = client.recv(max_size).decode('utf-8')    #Receive data and decode
        client.close()  #Close

        #Cut header
        index = data.find('\r\n\r\n')
        data = data[index:]

        #Write HTML file
        fout = open(filename, 'w')
        fout.write(data)
        fout.close()

    except:
        sys.stderr.write(traceback.format_exc())
        exit()


if __name__ == '__main__':
    main()

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6