2

我有一个关键问题。我想将我的应用程序与另一个更旧的应用程序集成。该服务只是一个 Web 表单,可能位于框架后面(我认为可能是ASP Classic)。我有一个操作 URL,并且我有用于复制此服务的 HTML 代码。

这是旧服务(HTML 页面)的一部分:

<FORM method="POST"
    url="https://host/path1/path2/AdapterHTTP?action_name=myactionWebAction&NEW_SESSION=true"
    enctype="multipart/form-data">

    <INPUT type="text" name="AAAWebView-FormAAA-field1" />
    <INPUT type="hidden" name="AAAWebView-FormAAA-field2" value="" />
    <INPUT type="submit" name="NAV__BUTTON__press__AAAWebView-FormAAA-enter" value="enter" />
</FORM>

我的应用程序应该使用 Python从代码隐藏模拟这个旧应用程序的表单提交。就目前而言,我没有那么幸运。

现在我这样做

import requests
payload = {'AAAWebView-FormAAA-field1': field1Value, \
    'AAAWebView-FormAAA-field2': field2Value, \
    'NAV__BUTTON__press__AAAWebView-FormAAA-enter': "enter"
}
url="https://host/path1/path2/AdapterHTTP?action_name=myactionWebAction&NEW_SESSION=true"
headers = {'content-type': 'multipart/form-data'}
r = requests.post(url, data=payload, headers=headers)
print r.status_code

我收到一个 200 HTTP 响应代码,但如果我单击 HTML 页面上的提交按钮,该操作会保存值,但我的代码不会这样做。我该如何解决这个问题?


一个旧应用程序的所有者向我发送了这个 Java 异常日志。有任何想法吗?

org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
4

1 回答 1

5

files尝试像requests.post一样传递一个空字典。我认为这将正确构建具有多部分边界的请求。

r = requests.post(url, data=payload, headers=headers, files={})
于 2012-04-20T08:49:39.083 回答