You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mod_python-dev@quetz.apache.org by Jim Gallacher <jp...@jgassociates.ca> on 2005/12/01 00:01:19 UTC
Re: Various musings about the request URL / URI / whatever
Daniel J. Popowich wrote:
> Jim Gallacher writes:
>
>>Daniel J. Popowich wrote:
>>
>>>Jim Gallacher writes:
>>>
>>>
>>>>Jim Gallacher wrote:
>>>>
>>>>
>>>>
>>>>>Using an internal_redirect messes with some of these attributes but not
>>>>>others. Those that change get their new values from the new_uri used in
>>>>>the redirect. Unchanged values are from the initial request.
>>>>>
>>>>>req.internal_redirect(new_uri)
>>>>>
>>>>>the_request unchanged
>>>>>unparsed_uri new
>>>>>parsed_uri new
>>>>>args new
>>>>>uri unchanged
>>>>
>>>> ^^^^^^^^^
>>>> uri new (oops - wee typo there)
>>>>
>>>>
>>>>
>>>>>hostname unchanged
>>>
>>>
>>>Jim,
>>>
>>>Really, I don't mean to be obtuse, but I'm not groking your point.
>>>Are you clarifying that for internal redirects the *source* for these
>>>attributes is different than what I was saying in my documentation
>>
>>Exactly. The documentation needs to account for the different behaviour
>>after an internal_redirect. I'll let the code talk for me as I can't
>>come up with adequate text. Assume you are using publisher with the
>>following code.
>>
>>Client request:
>>http://www.example.com/mod_python/parsed_uri/mptest.py?blah=de-blah
>>
>>mptest.py
>>---------
>>
>>def index(req):
>> req.content_type = 'text/plain'
>> req.write('-----\nindex\n-----\n')
>> stuff(req)
>> # I'm sorry about the look of the next statement -
>> # thunderbird line wrapping issues
>> req.internal_redirect("http://ABCDE.example.org:666"
>> "/mod_python/parsed_uri/mptest/redirect"
>> "?inquisition=spanish#foo")
>>
>>def redirect(req):
>> req.write('\n\n--------\nredirect\n--------\n')
>> stuff(req)
>>
>>def stuff(req):
>> req.write('req.the_request: %s\n' % req.the_request)
>> req.write('req.uri: %s\n' % req.uri)
>> req.write('req.unparsed_uri: %s\n' % str(req.unparsed_uri))
>> req.write('req.parsed_uri: %s\n' % str(req.parsed_uri))
>> req.write('req.hostname: %s\n' % req.hostname)
>> req.write('req.args: %s\n' % req.args)
>>
>>
>>Output:
>>=======
>>
>>-----
>>index
>>-----
>>req.the_request: GET /mod_python/parsed_uri/mptest?blah=de-blah HTTP/1.1
>>req.uri: /mod_python/parsed_uri/mptest.py
>>req.unparsed_uri: /mod_python/parsed_uri/mptest
>>req.parsed_uri: (None, None, None, None, None, None,
>>'/mod_python/parsed_uri/mptest', 'blah=de-blah', None)
>>req.hostname: www.example.org
>>
>>req.args: blah=de-blah
>>
>>--------
>>redirect
>>--------
>>req.the_request: GET /mod_python/parsed_uri/mptest HTTP/1.1
>>req.uri: /mod_python/parsed_uri/mptest.py/redirect
>>req.unparsed_uri:
>>http://ABCDE.example.org:666/mod_python/parsed_uri/mptest/redirect?inquisition=spanish#foo
>>req.parsed_uri: ('http', 'ABCDE.example.org:666', None, None,
>>'ABCDE.example.org', 666, '/mod_python/parsed_uri/mptest/redirect',
>>'inquisition=spanish', 'foo')
>>req.hostname: www.example.org
>>req.args: inquisition=spanish
>>
>
>
> HOLY COW! Is it me or does this seem completely arbitrary?
Ambiguous at the very least. At least we can blame always blame apache. ;)
> The value
> of the_request is wrong, too (doesn't include the query).
Bit of an operator error there. The ol' copy and paste bit me on the
bum. Probably a good thing that I'm not writing any nuclear reactor
control code today.
I ran the test a couple of times and the results posted above were *not*
from the given request. It should look more like this:
Client request:
http://www.example.com/mod_python/parsed_uri/mptest.py?blah=de-blah
-----
index
-----
req.the_request: GET /mod_python/parsed_uri/mptest.py?blah=de-blah HTTP/1.1
--------
redirect
--------
req.the_request: GET /mod_python/parsed_uri/mptest.py?blah=de-blah HTTP/1.1
Jim