Graham Dumpleton
grahamd at dscpl.com.au
Tue Sep 26 00:02:10 EDT 2006
CARTWRIGHT, Guy, GBM wrote .. > > From memory, you can set req.headers_in and it will go > > through to backend via proxy. Give it a try anyway. Simply go: > > > > req.headers_in['X-MyHeader'] = 'test' > > > > and see if it gets through. > > > > No luck with the above, or with: > > req.headers_out['X-MyHeader'] = 'test' > > but the following does work and gets passed through to the back-end > server... > > req.err_headers_out['X-MyHeader'] = 'test' > return apache.OK > > Weird... That doesn't make a great deal of sense and I wouldn't rely on it. FWIW, after I got proxying in mod_python 3.3 working again (I had managed to break it), I found the following worked fine. import posixpath from mod_python import apache, Cookie def fixuphandler(req): if req.proxyreq: return apache.DECLINED normalised_uri = posixpath.normpath(req.uri) if normalised_uri: if normalised_uri != '/' and req.uri[-1] == '/': normalised_uri += '/' length = len(req.filename) length -= len(req.hlist.directory) - 1 length += len(req.path_info or '') baseurl = normalised_uri[:-length] path = normalised_uri[len(baseurl):] req.proxyreq = apache.PROXYREQ_REVERSE req.uri = 'http://localhost:8082/~grahamd/headers' + path req.filename = 'proxy:%s' % req.uri req.handler = 'proxy-server' req.headers_in['Cookie'] = str(Cookie.Cookie('XXX', 'YYY')) req.log_error('uri = %s' % req.uri) req.log_error('filename = %s' % req.filename) req.log_error('handler = %s' % req.handler) return apache.OK In the backend server, could then use: from mod_python import apache, Cookie def handler(req): req.content_type = 'text/plain' for name in req.headers_in: req.write('%s: %s\n' % (name, req.headers_in[name])) req.write('\n') req.write(str(Cookie.get_cookies(req))) return apache.OK I still need to commit changes back into mod_python repository to fix what I broke, but mod_python 3.3 certainly provides more flexibility than perhaps using mod_rewrite. I'll get around to trying to do it with mod_rewrite later. Sorry, for late followup, have been away for a week. Graham
|