[Twisted-Python] web client FileBodyProducer - transfer encoding

Kevin Mcintyre kebin70 at gmail.com
Mon Jan 30 18:44:18 MST 2017


Thanks - that's exactly what I was looking for.

*But note* when using FileBodyProducer(StringIO(json.dumps(~blah))) -- I
still see a content-length in the request header as it's received by
twisted.  Am I correct to assume the request is agnostic...meaning it's
shaped the same for twisted as it is for apache.

Headers({'host': ['localhost:8080'], 'connection': ['close'],
'content-length': ['671'], 'user-agent': ['PassengerTest']})

from twisted.web import server, resource
from twisted.internet import reactor

class Simple(resource.Resource):
    isLeaf = True
    def render_POST(self, request):
        print request.requestHeaders
        return request.content.getvalue()

site = server.Site(Simple())
reactor.listenTCP(8080, site)
reactor.run()



On Mon, Jan 30, 2017 at 4:59 PM, Jean-Paul Calderone <
exarkun at twistedmatrix.com> wrote:

> On Mon, Jan 30, 2017 at 7:44 PM, Glyph Lefkowitz <glyph at twistedmatrix.com>
> wrote:
>
>> Gotcha.  I guess what I meant was that you shouldn't care about this at
>> the application level, but you're talking about an operational concern, not
>> an application-level concern.
>>
>> Perhaps this should be a tunable on Agent somehow.  Can you file a ticket?
>>
>
>
> Well... It *is* sort of tuneable, as you implied earlier.
>
> If you pass an IBodyProducer with a non-None length, Agent will send a
> Content-Length header - not use chunked Transfer-Encoding.
> FileBodyProducer doesn't know how to determine the length of a StringIO, so
> you get chunked with this example.  If you write the JSON to a regular file
> and FileBodyProducer(open(the file)) you'll get a Content-Length request.
> You could also write a new (trivial) IBodyProducer that does know how to
> compute the length of a StringIO.
>
> The documentation doesn't exactly spell this out - but the only reason
> `length` is part of the interface is to be able to generate the
> Content-Length header.
>
> What would the ticket be?  Expanded documentation to make this behavior
> into an explicit guarantee of the interface?  A new toggle somewhere to
> force Agent.request into one mode or the other (regardless of the
> performance consequences)?
>
> And that stuff you said about proxies before was true ... So even if you
> can control this in Agent, you're still not *guaranteed* the server will
> see what you send.
>
> Jean-Paul
>
>
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20170130/74662e13/attachment-0002.html>


More information about the Twisted-Python mailing list