開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Python 3.4 (プログラミング言語)
Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の11章(ソケットとネットワーキング(127.0.0.1という場所はない)、コードマグネット(p.494)をpythonで考えてみる。
コードマグネット(p.494)
コード(BBEdit, Emacs)
sample494.py
#!/usr/bin/env python3 #-*- coding: utf-8 -*- import os import sys import socket def error(msg): print("{0}: {1}".format(msg, err)) sys.exit(1) def say(s): try: data = s.encode('utf-8') count = connect_d.send(data) if count != len(data): raise Exception() except Exception as err: raise Exception('クライアントの通信エラー: {0}'.format(err)) host = 'en.wikipedia.org' port = 80 d_sock = socket.socket() try: d_sock.connect((host, port)) except Exception as err: error(err) try: d_sock.send('GET /wiki/{0} http/1.1\r\n'.format( sys.argv[1]).encode('utf-8')) except Exception as err: error(err) try: d_sock.send(b'Host: en.wikipedia.org\r\n\r\n') except Exception as err: error(err) while True: try: data = d_sock.recv(255) except Exception as err: error(err) print(data.decode('utf-8'), end='') if data == b'': break d_sock.close()
入出力結果(Terminal, IPython)
$ ./sample494.py "O'Reilly_Media" HTTP/1.1 200 OK Server: Apache ...省略 </body> </html> $ $
urllib.rueqst moduleをインポートで手軽にした版。
コード(BBEdit, Emacs)
sample494_1.py
#!/usr/bin/env python3 #-*- coding: utf-8 -*- import sys import urllib.request host = 'en.wikipedia.org' data = urllib.request.urlopen('http://{0}/wiki/{1}'.format(host, sys.argv[1])) for line in data: line = line.decode('utf-8') print(line, end='') data.close()
入出力結果(Terminal, IPython)
$ ./sample494_1.py "O'Reilly_Media" <!DOCTYPE html> <html lang="en" dir="ltr" class="client-nojs"> ... 省略 </body> </html> $
0 コメント:
コメントを投稿