Skip to content

Commit 94d08ac

Browse files
bmullerasvetlov
authored andcommitted
Conform to RFC3986 - do not include url fragments in requests (#1174)
* do not include url fragments in requests * Added myself to CONTRIBUTORS.txt and filed a new entry to CHANGES.rst
1 parent da03eef commit 94d08ac

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed

CHANGES.rst

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ CHANGES
131131
- `aiohttp.TCPConnector` uses asynchronous DNS resolver if available by
132132
default #1152
133133

134-
-
134+
- Conform to RFC3986 - do not include url fragments in client requests #1174
135135

136136
-
137137

CONTRIBUTORS.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Ben Bader
2626
Benedikt Reinartz
2727
Brett Cannon
2828
Brian C. Lane
29+
Brian Muller
2930
Boris Feld
3031
Carl George
3132
Chien-Wei Huang
@@ -133,4 +134,4 @@ Yusuke Tsutsumi
133134
Марк Коренберг
134135
Семён Марьясин
135136
Pau Freixes
136-
Alexey Firsov
137+
Alexey Firsov

aiohttp/client.py

+1
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ def _request(self, method, url, *,
181181
skip_headers.add(istr(i))
182182

183183
while True:
184+
url, _ = urllib.parse.urldefrag(url)
184185

185186
cookies = self._cookie_jar.filter_cookies(url)
186187

tests/test_client_functional.py

+39
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,45 @@ def handler_ok(request):
374374
yield from resp.release()
375375

376376

377+
@asyncio.coroutine
378+
def test_drop_fragment_on_redirect(create_app_and_client):
379+
@asyncio.coroutine
380+
def handler_redirect(request):
381+
return web.Response(status=301, headers={'Location': '/ok#fragment'})
382+
383+
@asyncio.coroutine
384+
def handler_ok(request):
385+
return web.Response(status=200)
386+
387+
app, client = yield from create_app_and_client()
388+
app.router.add_route('GET', '/ok', handler_ok)
389+
app.router.add_route('GET', '/redirect', handler_redirect)
390+
391+
resp = yield from client.get('/redirect')
392+
try:
393+
assert resp.status == 200
394+
assert resp.url.endswith('/ok')
395+
finally:
396+
yield from resp.release()
397+
398+
399+
@asyncio.coroutine
400+
def test_drop_fragment(create_app_and_client):
401+
@asyncio.coroutine
402+
def handler_ok(request):
403+
return web.Response(status=200)
404+
405+
app, client = yield from create_app_and_client()
406+
app.router.add_route('GET', '/ok', handler_ok)
407+
408+
resp = yield from client.get('/ok#fragment')
409+
try:
410+
assert resp.status == 200
411+
assert resp.url.endswith('/ok')
412+
finally:
413+
yield from resp.release()
414+
415+
377416
@asyncio.coroutine
378417
def test_history(create_app_and_client):
379418
@asyncio.coroutine

0 commit comments

Comments
 (0)