2010-07-21 85 views
2

我使用Twisted web“HTTPClient”协议与http服务器进行对话(使用扭曲的应用程序作为客户端),问题是我的大部分请求都不接受我的头文件。有没有某种方式(也许使用某些库)来生成头? 我会后一些代码,所以你可以看看在Twisted客户端生成头文件

class Local(HTTPClient): 
def generateHeaders(self, type=None): 
    self.sendHeader('User-Agent', 'Twisted Web Client') 
    if type: 
     self.sendHeader('Content-Type', 'x-www-form-urlencoded') 
    self.sendHeader('Accept', '*/*') 
    self.sendHeader('Host', 'localhost') 
    self.endHeaders() 

def connectionMade(self): 
    ## GENERATE ID 
    self.userid= self.generateID() 
    self.sendCommand('POST', '/chat/action=join&user=pirosb3') 
    self.generateHeaders(type=True) 

def dataReceived(self, data): 
    print data 

正如你所看到的,我创建了一个对我产生头的方法,但不是很有效,我必须说,我总是得到错误响应。

任何人都知道解决方案吗?

感谢

+1

你的问题并不能说明问题我觉得对于任何人来说都足够详细。 “效率不高”是什么意思?关于“我的请求不接受我的标题”呢?为什么不'sendHeader'“生成[a]头文件”适合你? – 2010-07-21 22:24:50

回答

3

我肯定会建议你使用Twisted的Agent类与twisted.web.http_headers模块中的Header类一起。

有一个很好的指南可用here

如果你需要它增加了一些头的请求,并可以读答案的那些扭曲的一个HTTP客户端的一个活生生的例子,那就是:

from pprint import pformat 

from twisted.internet import reactor 
from twisted.internet.defer import Deferred 
from twisted.internet.protocol import Protocol 
from twisted.web.client import Agent 
from twisted.web.http_headers import Headers 

class BeginningPrinter(Protocol): 
    def __init__(self, finished): 
     self.finished = finished 
     self.remaining = 1024 * 10 

    def dataReceived(self, bytes): 
     if self.remaining: 
      display = bytes[:self.remaining] 
      print 'Some data received:' 
      print display 
      self.remaining -= len(display) 

    def connectionLost(self, reason): 
     print 'Finished receiving body:', reason.getErrorMessage() 
     self.finished.callback(None) 

agent = Agent(reactor) 
d = agent.request(
    'GET', 
    'http://example.com/', 
    Headers({'User-Agent': ['Twisted Web Client Example']}), 
    None) 

def cbRequest(response): 
    print 'Response version:', response.version 
    print 'Response code:', response.code 
    print 'Response phrase:', response.phrase 
    print 'Response headers:' 
    print pformat(list(response.headers.getAllRawHeaders())) 
    finished = Deferred() 
    response.deliverBody(BeginningPrinter(finished)) 
    return finished 
d.addCallback(cbRequest) 

def cbShutdown(ignored): 
    reactor.stop() 
d.addBoth(cbShutdown) 

reactor.run()