challenge HTTPでGET その2

HTTPでGET その2

前回のお題
http://ja.doukaku.org/18/

HTTPで指定されたURLをGETするコードを書いてください。 
URLは「http://ja.doukaku.org/feeds/comments/」とします。 

ただし
・Proxyサーバを経由してGETしてください。
・タイムアウトを1秒に設定してください。
 (デフォルトが1秒でも、1秒に変更してください)
・タイムアウトを十分に小さくした場合、GETが失敗することを確認してください。

もしOSに依存する場合はそのOS名のタグを、 依存しない場合は「OS非依存」というタグをつけてください。
 わからなければつけなくても構いません。

Posted feedbacks - Python

1
2
3
4
5
from urllib2 import *
req = Request("http://ja.doukaku.org/feeds/comments/")
req.set_proxy("localhost:8000", "http")
socket.setdefaulttimeout(1.0)
print urlopen(req).read()

タイムアウトをこのデータ取得関数全体でのタイムアウトだと解釈して
すべてのメソッド呼び出し前にタイムアウトを設定しなおしています。

確認できませんがposix系でしか動かないかもしれません。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import socket
from time import time

def geturl(url, proxy_host, proxy_port, timeout):
  timeout += time()
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  s.settimeout(timeout-time())
  s.connect((proxy_host, proxy_port))
  s.settimeout(timeout-time())
  s.send('GET %s HTTP/1.1\r\n\r\n' % url)
  s.settimeout(timeout-time())
  r = d = s.recv(2048)
  while d:
    s.settimeout(timeout-time())
    d = s.recv(2048)
    r += d
  s.close()
  return r[r.index('\r\n\r\n')+4:]

Index

Feed

Other

Link

Pathtraq

loading...