4

HTTP ストリーム (別名 HTTP サーバー プッシュ) としてデータを提供するサイトのクライアントを作成しようとしています。ただし、urllib2.urlopen() はストリームを現在の状態で取得し、接続を閉じます。urllib2 をスキップして httplib を直接使用しようとしましたが、これは同じ動作をしているようです。

リクエストは、5 つのパラメーターのセットを持つ POST リクエストです。ただし、Cookie や認証は必要ありません。

ストリームを開いたままにして、数秒ごとにすべてが再ダウンロードされるのを待ってラグを導入するのではなく、各プログラムループで新しいコンテンツをチェックできるようにする方法はありますか?

4

3 に答える 3

1

実際に応答ヘッダーを解析する必要がありますか、それとも主にコンテンツに関心がありますか? また、HTTP リクエストは複雑で、Cookie やその他のヘッダーを設定する必要がありますか? それとも非常に単純なリクエストで十分でしょうか?

HTTP 応答の本文だけが重要で、あまり派手な要求がない場合は、単純にソケット接続を使用することを検討する必要があります。

import socket

SERVER_ADDR = ("example.com", 80)

sock = socket.create_connection(SERVER_ADDR)
f = sock.makefile("r+", bufsize=0)

f.write("GET / HTTP/1.0\r\n"
      + "Host: example.com\r\n"    # you can put other headers here too
      + "\r\n")

# skip headers
while f.readline() != "\r\n":
    pass

# keep reading forever
while True:
    line = f.readline()     # blocks until more data is available
    if not line:
        break               # we ran out of data!

    print line

sock.close()
于 2010-04-26T21:05:16.393 に答える
0

使用する1つの方法は次のurllib2とおりです(このサイトにも基本認証が必要であると仮定します):

 import urllib2
 p_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
 url = 'http://streamingsite.com'
 p_mgr.add_password(None, url, 'login', 'password')

 auth = urllib2.HTTPBasicAuthHandler(p_mgr)
 opener = urllib2.build_opener(auth)

 urllib2.install_opener(opener)
 f = opener.open('http://streamingsite.com')

 while True:
     data = f.readline()
于 2010-04-26T21:10:53.333 に答える