diff --git a/product/ERP5/Tool/ContributionTool.py b/product/ERP5/Tool/ContributionTool.py
index baaf41d690b5f6a88953c262d005fc56297f17c1..e89f56420a49d404b156c1ba58cf8406c8679daf 100644
--- a/product/ERP5/Tool/ContributionTool.py
+++ b/product/ERP5/Tool/ContributionTool.py
@@ -43,6 +43,7 @@ from Products.ERP5Type import Permissions
 from Products.ERP5Type.Utils import reencodeUrlEscapes
 from Products.ERP5 import _dtmldir
 from Products.ERP5.Document.Url import no_crawl_protocol_list
+from Products.ERP5Type.Utils import fill_args_from_request
 from AccessControl import Unauthorized
 
 from DateTime import DateTime
@@ -97,7 +98,9 @@ class ContributionTool(BaseTool):
   manage_overview = DTMLFile( 'explainContributionTool', _dtmldir )
 
   security.declareProtected(Permissions.AddPortalContent, 'newContent')
-  def newContent(self, **kw):
+  @fill_args_from_request('data', 'filename', 'portal_type', 'container_path',
+                          'discover_metadata', 'temp_object', 'reference')
+  def newContent(self, REQUEST=None, **kw):
     """
       The newContent method is overriden to implement smart content
       creation by detecting the portal type based on whatever information
@@ -225,6 +228,8 @@ class ContributionTool(BaseTool):
               .discoverMetadata(filename=filename, 
                                 user_login=user_login,
                                 input_parameter_dict=input_parameter_dict)
+      if REQUEST is not None:
+        return REQUEST.RESPONSE.redirect(self.absolute_url())
       return document
 
     #
@@ -275,6 +280,8 @@ class ContributionTool(BaseTool):
       # Document does not have such attribute
       pass
     document.reindexObject()
+    if REQUEST is not None:
+      return REQUEST.RESPONSE.redirect(self.absolute_url())
     return document
 
   security.declareProtected( Permissions.AddPortalContent, 'newXML' )
diff --git a/product/ERP5OOo/tests/testIngestion.py b/product/ERP5OOo/tests/testIngestion.py
index e94d1630875a3678f140d43ebc10c14b85eaf7cc..6303cd76df59e6264b2fd61bde294e0d163ac7ff 100644
--- a/product/ERP5OOo/tests/testIngestion.py
+++ b/product/ERP5OOo/tests/testIngestion.py
@@ -47,6 +47,10 @@ from zLOG import LOG, INFO, ERROR
 from Products.CMFCore.utils import getToolByName
 from zExceptions import BadRequest
 from Products.ERP5Type.tests.backportUnittest import expectedFailure
+import urllib
+import urllib2
+import httplib
+import urlparse
 
 # test files' home
 TEST_FILES_HOME = os.path.join(os.path.dirname(__file__), 'test_document')
@@ -2004,6 +2008,41 @@ return result
                       reference='I.want.a.pdf',
                       portal_type='PDF')
 
+  def test_newContent_trough_http(self):
+    filename = 'import_region_category.xls'
+    path = makeFilePath(filename)
+    data = open(path, 'r').read()
+    reference = 'ITISAREFERENCE'
+
+    portal_url = self.portal.absolute_url()
+    url_split = urlparse.urlsplit(portal_url)
+    url_dict = dict(protocol=url_split[0],
+                    hostname=url_split[1])
+    uri = '%(protocol)s://%(hostname)s' % url_dict
+    password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 
+    password_mgr.add_password(realm=None, uri=uri, user='ERP5TypeTestCase',
+                              passwd='')
+    opener = urllib2.build_opener(urllib2.HTTPDigestAuthHandler(password_mgr),
+                                  urllib2.HTTPBasicAuthHandler(password_mgr))
+    urllib2.install_opener(opener)
+
+    push_url = '%s%s/newContent' % (uri, self.portal.portal_contributions.getPath(),)
+    request = urllib2.Request(push_url, urllib.urlencode(
+                                        {'data': data,
+                                        'filename': filename,
+                                        'reference': reference,
+                                        'disable_cookie_login__': 1,
+                                        }))
+    # disable_cookie_login__ is required to force zope to raise Unauthorized (401)
+    # then HTTPDigestAuthHandler can perform HTTP Authentication
+    response = urllib2.urlopen(request)
+    self.assertEquals(response.getcode(), httplib.OK)
+    transaction.commit()
+    self.tic()
+    document = self.portal.portal_catalog.getResultValue(portal_type='Spreadsheet',
+                                                         reference=reference)
+    self.assertTrue(document is not None)
+    self.assertEquals(document.getData(), data)
 
 def test_suite():
   suite = unittest.TestSuite()