Update schemaless URI support

This commit is contained in:
ajaymittur28 2020-07-01 13:32:17 +05:30
parent f53f06020b
commit 7fc80671a8
2 changed files with 11 additions and 4 deletions

View File

@ -7,7 +7,7 @@ import warnings
from contextlib import suppress
from io import BytesIO
from time import time
from urllib.parse import urldefrag, urlparse
from urllib.parse import urldefrag, urlunparse
from twisted.internet import defer, protocol, ssl
from twisted.internet.endpoints import TCP4ClientEndpoint
@ -255,7 +255,7 @@ class ScrapyProxyAgent(Agent):
bindAddress=bindAddress,
pool=pool,
)
self._proxyURI = URI.fromBytes(urlparse(proxyURI)._replace(scheme=b'http').geturl())
self._proxyURI = URI.fromBytes(proxyURI)
def request(self, method, uri, headers=None, bodyProducer=None):
"""
@ -297,7 +297,7 @@ class ScrapyAgent:
bindaddress = request.meta.get('bindaddress') or self._bindAddress
proxy = request.meta.get('proxy')
if proxy:
_, _, proxyHost, proxyPort, proxyParams = _parse(proxy)
proxyScheme, proxyNetloc, proxyHost, proxyPort, proxyParams = _parse(proxy)
scheme = _parse(request.url)[0]
proxyHost = to_unicode(proxyHost)
omitConnectTunnel = b'noconnect' in proxyParams
@ -319,9 +319,13 @@ class ScrapyAgent:
pool=self._pool,
)
else:
proxyScheme = b'http' if not proxyScheme else proxyScheme
proxyHost = to_bytes(proxyHost, encoding='ascii')
proxyPort = to_bytes(str(proxyPort), encoding='ascii')
proxyURI = urlunparse((proxyScheme, proxyNetloc, proxyParams, '', '', ''))
return self._ProxyAgent(
reactor=reactor,
proxyURI=to_bytes(proxy, encoding='ascii'),
proxyURI=to_bytes(proxyURI, encoding='ascii'),
connectTimeout=timeout,
bindAddress=bindaddress,
pool=self._pool,

View File

@ -1,5 +1,6 @@
from time import time
from urllib.parse import urlparse, urlunparse, urldefrag
from re import match
from twisted.web.client import HTTPClientFactory
from twisted.web.http import HTTPClient
@ -32,6 +33,8 @@ def _parse(url):
and is ascii-only.
"""
url = url.strip()
if not match(r'^\w+://', url):
url = '//' + url
parsed = urlparse(url)
return _parsed_url_args(parsed)