diff -urN zope/lib/python/ZPublisher/HTTPRequest.py zope-mod/lib/python/ZPublisher/HTTPRequest.py
--- zope/lib/python/ZPublisher/HTTPRequest.py	Thu Jan  3 20:41:05 2002
+++ zope-mod/lib/python/ZPublisher/HTTPRequest.py	Mon Mar 17 18:20:43 2003
@@ -21,6 +21,7 @@
 from Converters import get_converter
 from maybe_lock import allocate_lock
 xmlrpc=None # Placeholder for module that we'll import if we have to.
+soap=None
 
 #cgi hotfix:
 if not hasattr(cgi, 'valid_boundary'):
@@ -347,18 +348,28 @@
         meth=None
         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
+            # Hm, maybe it's an XML-RPC or SOAP
+	    if (fs.headers.has_key('content-type') and
+                fs.headers['content-type'][:8] == 'text/xml' and
                 method == 'POST'):
-                # Ye haaa, XML-RPC!
-                global xmlrpc
-                if xmlrpc is None: import xmlrpc
-                meth, self.args = xmlrpc.parse_input(fs.value)
-                response=xmlrpc.response(response)
-                other['RESPONSE']=self.response=response
-                other['REQUEST_METHOD']='' # We don't want index_html!
-                self.maybe_webdav_client = 0
+              if environ.has_key('HTTP_SOAPACTION'):
+                  # this is a SOAP request
+                  global soap
+                  if soap is None:
+                          import soap
+                  meth, self.args = soap.parse_input(fs.value)
+                  response = soap.response(response)
+                  other['RESPONSE'] = self.response = response
+                  other['REQUEST_METHOD'] = ''
+              else:
+	          # Ye haaa, XML-RPC!
+	          global xmlrpc
+	          if xmlrpc is None: import xmlrpc
+	          meth, self.args = xmlrpc.parse_input(fs.value)
+	          response=xmlrpc.response(response)
+	          other['RESPONSE']=self.response=response
+	          other['REQUEST_METHOD']='' # We don't want index_html!
+                  self.maybe_webdav_client = 0
             else:
                 self._file=fs.file
         else:
File zope/var/pcgi.soc is a socket while file zope-mod/var/pcgi.soc is a socket
