3

ツイストを使用して Web クライアント アプリケーションを作成しようとしていますが、Cookie に問題があります。誰かが私が見ることができる例を持っていますか?

4

3 に答える 3

7

getPageリクエストまたはレスポンス ヘッダーへの直接アクセスを簡単に許可しないのは事実ですが (getPage非常に優れた API ではないことを示す 1 つの例にすぎません)、Cookie は実際にサポートされています。

cookies = {cookies: tosend}
d = getPage(url, cookies=cookies)
def cbPage(result):
    print 'Look at my cookies:', cookies
d.addCallback(cbPage)

に渡されたときにディクショナリ内のすべての CookiegetPageが送信されます。リクエストに応じてサーバーが設定する新しい Cookie は、ディクショナリに追加されます。

署名のどこにもパラメーターがないgetPageため、見たときにこの機能を見落とした可能性があります。しかし、それは を取り、これがどのようにサポートされているかです: に渡された余分な引数は、それ自体については知らず、 に渡されます。そのメソッドのシグネチャを見て、 に渡すことができるすべてのものを確認してください。getPagecookies**kwargscookiesgetPageHTTPClientFactory.__init__getPage

于 2009-11-06T14:23:05.763 に答える
2

ヘッダーは twisted.web.client.HTTPClientFactory に保存されますが、ウェブページをプルバックするために設計された関数である twisted.web.client.getPage() からは利用できません。私は関数を書き直しました:

from twisted.web import client

def getPage(url, contextFactory=None, *args, **kwargs):
    fact = client._makeGetterFactory(
        url,
        HTTPClientFactory,
        contextFactory=contextFactory,
        *args, **kwargs)
    return fact.deferred.addCallback(lambda data: (data, fact.response_headers))
于 2009-09-09T13:18:38.827 に答える
1
from twisted.internet import reactor
from twisted.web import client

def getPage(url, contextFactory=None, *args, **kwargs):
    return client._makeGetterFactory(
        url,
        CustomHTTPClientFactory,
        contextFactory=contextFactory,
        *args, **kwargs).deferred

class CustomHTTPClientFactory(client.HTTPClientFactory):

    def __init__(self,url, method='GET', postdata=None, headers=None,
                 agent="Twisted PageGetter", timeout=0, cookies=None,
                 followRedirect=1, redirectLimit=20):
        client.HTTPClientFactory.__init__(self, url, method, postdata,
                                          headers, agent, timeout, cookies,
                                          followRedirect, redirectLimit)

    def page(self, page):
        if self.waiting:
            self.waiting = 0
            res = {}
            res['page'] = page
            res['headers'] = self.response_headers
            res['cookies'] = self.cookies
            self.deferred.callback(res)

if __name__ == '__main__':
    def cback(result):
        for k in result:
            print k, '==>', result[k]
        reactor.stop()

    def eback(error):
        print error.getTraceback()
        reactor.stop()

    d = getPage('http://example.com', agent='example web client', 
                 cookies={ 'some' : 'cookie' } )
    d.addCallback(cback)
    d.addErrback(eback)

    reactor.run()
于 2011-05-28T17:39:33.207 に答える