開発環境
- 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 コメント:
コメントを投稿