Merge lp:~franciscosouza/txaws/txaws-proxysupport into lp:txaws

Proposed by Francisco Souza
Status: Needs review
Proposed branch: lp:~franciscosouza/txaws/txaws-proxysupport
Merge into: lp:txaws
Diff against target: 73 lines (+24/-9)
1 file modified
txaws/client/base.py (+24/-9)
To merge this branch: bzr merge lp:~franciscosouza/txaws/txaws-proxysupport
Reviewer Review Type Date Requested Status
txAWS Committers Pending
Review via email: mp+134896@code.launchpad.net

Description of the change

client: add support for http and https proxying

https://codereview.appspot.com/6852064/

To post a comment you must log in.
Revision history for this message
Chico (franciscossouza) wrote :
Download full text (3.4 KiB)

Reviewers: mp+134896_code.launchpad.net,

Message:
Please take a look.

Description:
client: add support for http and https proxying

https://code.launchpad.net/~franciscosouza/txaws/txaws-proxysupport/+merge/134896

(do not edit description out of merge proposal)

Please review this at https://codereview.appspot.com/6852064/

Affected files:
   A [revision details]
   M txaws/client/base.py

Index: [revision details]
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: <email address hidden>
+New revision: <email address hidden>

Index: txaws/client/base.py
=== modified file 'txaws/client/base.py'
--- txaws/client/base.py 2012-05-16 02:35:26 +0000
+++ txaws/client/base.py 2012-11-19 12:56:26 +0000
@@ -1,3 +1,6 @@
+import os
+import urlparse
+
  try:
      from xml.etree.ElementTree import ParseError
  except ImportError:
@@ -6,14 +9,14 @@
  import warnings
  from StringIO import StringIO

+from twisted.internet.endpoints import TCP4ClientEndpoint
  from twisted.internet.ssl import ClientContextFactory
  from twisted.internet.protocol import Protocol
  from twisted.internet.defer import Deferred, succeed, fail
  from twisted.python import failure
  from twisted.web import http
  from twisted.web.iweb import UNKNOWN_LENGTH
-from twisted.web.client import HTTPClientFactory
-from twisted.web.client import Agent
+from twisted.web.client import Agent, ProxyAgent
  from twisted.web.client import ResponseDone
  from twisted.web.http import NO_CONTENT
  from twisted.web.http_headers import Headers
@@ -220,16 +223,28 @@
          if (self.body_producer is None) and (data is not None):
              self.body_producer = FileBodyProducer(StringIO(data))
          if scheme == "https":
- if self.endpoint.ssl_hostname_verification:
- contextFactory = WebVerifyingContextFactory(host)
+ proxy_endpoint = os.environ.get("https_proxy")
+ if proxy_endpoint:
+ proxy_url = urlparse.urlparse(proxy_endpoint)
+ endpoint = TCP4ClientEndpoint(self.reactor,
proxy_url.hostname, proxy_url.port)
+ agent = ProxyAgent(endpoint, self.reactor)
              else:
- contextFactory = WebClientContextFactory()
- agent = Agent(self.reactor, contextFactory)
+ if self.endpoint.ssl_hostname_verification:
+ contextFactory = WebVerifyingContextFactory(host)
+ else:
+ contextFactory = WebClientContextFactory()
+ agent = Agent(self.reactor, contextFactory)
              self.client.url = url
              d = agent.request(method, url, self.request_headers,
                  self.body_producer)
          else:
- agent = Agent(self.reactor)
+ proxy_endpoint = os.environ.get("http_proxy")
+ if proxy_endpoint:
+ proxy_url = urlparse.urlparse(proxy_endpoint)
+ endpoint = TCP4ClientEndpoint(self.reactor,
proxy_url.hostname, proxy_url.port)
+ agent =...

Read more...

153. By Francisco Souza

client: don't pass reator to ProxyAgent

Endpoint already holds the instance of the reactor.

Revision history for this message
Chico (franciscossouza) wrote :
154. By Francisco Souza

client: trap PotentialDataLoss

Amazon never sends Content-Length header, even on http 1.0.

Revision history for this message
Chico (franciscossouza) wrote :

Unmerged revisions

154. By Francisco Souza

client: trap PotentialDataLoss

Amazon never sends Content-Length header, even on http 1.0.

153. By Francisco Souza

client: don't pass reator to ProxyAgent

Endpoint already holds the instance of the reactor.

152. By Francisco Souza

client: add support for http and https proxying

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'txaws/client/base.py'
2--- txaws/client/base.py 2012-05-16 02:35:26 +0000
3+++ txaws/client/base.py 2012-11-21 12:05:22 +0000
4@@ -1,3 +1,6 @@
5+import os
6+import urlparse
7+
8 try:
9 from xml.etree.ElementTree import ParseError
10 except ImportError:
11@@ -6,16 +9,16 @@
12 import warnings
13 from StringIO import StringIO
14
15+from twisted.internet.endpoints import TCP4ClientEndpoint
16 from twisted.internet.ssl import ClientContextFactory
17 from twisted.internet.protocol import Protocol
18 from twisted.internet.defer import Deferred, succeed, fail
19 from twisted.python import failure
20 from twisted.web import http
21 from twisted.web.iweb import UNKNOWN_LENGTH
22-from twisted.web.client import HTTPClientFactory
23-from twisted.web.client import Agent
24+from twisted.web.client import Agent, ProxyAgent
25 from twisted.web.client import ResponseDone
26-from twisted.web.http import NO_CONTENT
27+from twisted.web.http import NO_CONTENT, PotentialDataLoss
28 from twisted.web.http_headers import Headers
29 from twisted.web.error import Error as TwistedWebError
30 try:
31@@ -130,7 +133,7 @@
32 self._received += len(bytes)
33
34 def connectionLost(self, reason):
35- reason.trap(ResponseDone)
36+ reason.trap(ResponseDone, PotentialDataLoss)
37 d = self.finished
38 self.finished = None
39 streaming = self.content_length is UNKNOWN_LENGTH
40@@ -220,16 +223,28 @@
41 if (self.body_producer is None) and (data is not None):
42 self.body_producer = FileBodyProducer(StringIO(data))
43 if scheme == "https":
44- if self.endpoint.ssl_hostname_verification:
45- contextFactory = WebVerifyingContextFactory(host)
46+ proxy_endpoint = os.environ.get("https_proxy")
47+ if proxy_endpoint:
48+ proxy_url = urlparse.urlparse(proxy_endpoint)
49+ endpoint = TCP4ClientEndpoint(self.reactor, proxy_url.hostname, proxy_url.port)
50+ agent = ProxyAgent(endpoint)
51 else:
52- contextFactory = WebClientContextFactory()
53- agent = Agent(self.reactor, contextFactory)
54+ if self.endpoint.ssl_hostname_verification:
55+ contextFactory = WebVerifyingContextFactory(host)
56+ else:
57+ contextFactory = WebClientContextFactory()
58+ agent = Agent(self.reactor, contextFactory)
59 self.client.url = url
60 d = agent.request(method, url, self.request_headers,
61 self.body_producer)
62 else:
63- agent = Agent(self.reactor)
64+ proxy_endpoint = os.environ.get("http_proxy")
65+ if proxy_endpoint:
66+ proxy_url = urlparse.urlparse(proxy_endpoint)
67+ endpoint = TCP4ClientEndpoint(self.reactor, proxy_url.hostname, proxy_url.port)
68+ agent = ProxyAgent(endpoint)
69+ else:
70+ agent = Agent(self.reactor)
71 d = agent.request(method, url, self.request_headers,
72 self.body_producer)
73 d.addCallback(self._handle_response)

Subscribers

People subscribed via source and target branches