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