-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Tino Wildenhain wrote:
|>
|>I had a client that used to work on 2.7.0, and now doesn't on 2.7.3.
|>
|>The problem would appear to be that it's not substituting the
|>xmlrpc.Response class for a GET request on a text/xml content type and
|>therefore just delegating to the str() function instead of wrapping it
|>in the xml-rpc xml response tags.
|>
| I wonder how this ever was supposed to work since
| XML-RPC requires an entidy body for the message (which is
| in XML). You can compare with RFC2616 - there is no
| entidy body in GET. Your client needs to use POST.
| I suspect then it should work.
|
Ok, I now more fully understand the subtlety of this explanation.
What happened here is that in cgi.py's FieldStorage class, since this is
a GET request, it completely ignores the CONTENT_TYPE environment and
sets the content-type header to x-www-form-urlencoded.
According to Dave Winer's spec at http://www.xmlrpc.com/spec, XML-RPC is
supposed to be HTTP-POST based, where this issue is fully resolved.
I have implemented this GET 'Extension' with this patch.
I appreciate that supporting 'unofficial' extensions to protocols is not
something we want to encourage, but is there any chance of getting this
patch into zope core (ever)?
Cheers, Alan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFBbIWLCfroLk4EZpkRAlX3AKDI5Cdb6CUfdkqtSrEllfZeEGEnMwCdHJN0
78EIcOvXOD2H4imuI2NQOxw=
=H+yj
-----END PGP SIGNATURE-----
--- HTTPRequest.py 2004-10-13 11:22:32.212653472 +1000
+++ HTTPRequest.py.orig 2004-10-13 11:20:51.146017936 +1000
@@ -385,11 +385,9 @@
fs=FieldStorage(fp=fp,environ=environ,keep_blank_values=1)
if not hasattr(fs,'list') or fs.list is None:
# Hm, maybe it's an XML-RPC
- if ((fs.headers.has_key('content-type') and
- fs.headers['content-type'] == 'text/xml' and
- method == 'POST') or
- (environ.get('CONTENT_TYPE','') == 'text/xml' and
- method == 'GET')):
+ if (fs.headers.has_key('content-type') and
+ fs.headers['content-type'] == 'text/xml' and
+ method == 'POST'):
# Ye haaa, XML-RPC!
global xmlrpc
if xmlrpc is None: import xmlrpc
_______________________________________________
Zope-Dev maillist - [EMAIL PROTECTED]
http://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope )