Index: Lib/cookielib.py =================================================================== --- Lib/cookielib.py (revision 81035) +++ Lib/cookielib.py (working copy) @@ -601,19 +601,14 @@ return req_host, erhn def request_path(request): - """request-URI, as defined by RFC 2965.""" + """Path component of request-URI, as defined by RFC 2965.""" url = request.get_full_url() - #scheme, netloc, path, parameters, query, frag = urlparse.urlparse(url) - #req_path = escape_path("".join(urlparse.urlparse(url)[2:])) - path, parameters, query, frag = urlparse.urlparse(url)[2:] - if parameters: - path = "%s;%s" % (path, parameters) - path = escape_path(path) - req_path = urlparse.urlunparse(("", "", path, "", query, frag)) - if not req_path.startswith("/"): + parts = urlparse.urlsplit(url) + path = escape_path(parts.path) + if not path.startswith("/"): # fix bad RFC 2396 absoluteURI - req_path = "/"+req_path - return req_path + path = "/" + path + return path def request_port(request): host = request.get_host() Index: Lib/test/test_cookielib.py =================================================================== --- Lib/test/test_cookielib.py (revision 81035) +++ Lib/test/test_cookielib.py (working copy) @@ -1,11 +1,16 @@ # -*- coding: latin-1 -*- """Tests for cookielib.py.""" -import re, os, time +import cookielib +import os +import re +import time + from unittest import TestCase from test import test_support + class DateTimeTests(TestCase): def test_time2isoz(self): @@ -551,6 +556,16 @@ interact_netscape(c, "http://www.acme.com/blah/rhubarb/", 'eggs="bar"') self.assertIn("/blah/rhubarb", c._cookies["www.acme.com"]) + def test_default_path_with_query(self): + cj = cookielib.CookieJar() + uri = "http://example.com/?spam/eggs" + value = 'eggs="bar"' + interact_netscape(cj, uri, value) + # default path does not include query, so is "/", not "/?spam" + self.assertIn("/", cj._cookies["example.com"]) + # cookie is sent back to the same URI + self.assertEquals(interact_netscape(cj, uri), value) + def test_escape_path(self): from cookielib import escape_path cases = [ @@ -579,15 +594,14 @@ from urllib2 import Request from cookielib import request_path # with parameters - req = Request("http://www.example.com/rheum/rhaponicum;" + req = Request("http://www.example.com/rheum/rhaponticum;" "foo=bar;sing=song?apples=pears&spam=eggs#ni") - self.assertEquals(request_path(req), "/rheum/rhaponicum;" - "foo=bar;sing=song?apples=pears&spam=eggs#ni") + self.assertEquals(request_path(req), + "/rheum/rhaponticum;foo=bar;sing=song") # without parameters - req = Request("http://www.example.com/rheum/rhaponicum?" + req = Request("http://www.example.com/rheum/rhaponticum?" "apples=pears&spam=eggs#ni") - self.assertEquals(request_path(req), "/rheum/rhaponicum?" - "apples=pears&spam=eggs#ni") + self.assertEquals(request_path(req), "/rheum/rhaponticum") # missing final slash req = Request("http://www.example.com") self.assertEquals(request_path(req), "/")