如何测试multipart/form-data的POST请求

6

我正在寻找一款工具,可以测试multipart/form-data POST请求并调整请求。具体来说,我想测试内容类型标头中分号的存在/缺失:

multipart/form-data; boundary=140f0f40c9f411e19b230800200c9a66

我们有一个客户端没有发送分号,我们的新Servlet(使用Apache Commons FileUpload)无法解析上传的文件。旧版本的servlet使用不同的库方法来接受/解析请求,它可以解析该文件。在我能够通过包含分号来证明该请求将成功之前,客户端应用程序的所有者不想对其进行任何更改。
我一直在使用cURL来针对servlet运行测试,但是我无法调整它生成的请求以排除分号。我尝试了Firefox的Poster附加组件和Fiddler来生成测试POST请求,但是它们会导致此错误:
org.apache.commons.fileupload.FileUploadException: Stream ended unexpectedly

有人找到了一种成功测试上传文件的multipart/form-data POST请求的方法吗?

1个回答

1

您可以使用curl来测试这些库,以下是一个使用multipart/form-data POST的示例:https://dev59.com/mmgv5IYBdhLWcg3wNuJ5#10765244

我喜欢像curl这样的命令行工具的一件事是它易于重复(在bash中上下箭头并按回车键),而且您可以保存测试供以后使用。

编辑:绝对有可能发送您要测试的自定义标头。关键是使用curl的原始命令而不是方便方法来格式化请求。使用-H传递原始标头,并使用--data-binary从文件传递主体而不更改行结尾(对于必须有CRLF行结尾的multipart/form-data非常重要)。以下是一个示例:

curl -X POST -H "Content-Type: multipart/form-data; boundary=----------------------------4ebf00fbcf09" --data-binary @test.txt http://localhost:3000/test

如果不方便使用中间文件,您可以像这样将其写成一行:
curl -X POST -H "Content-Type: multipart/form-data; boundary=----------------------------4ebf00fbcf09" -d $'------------------------------4ebf00fbcf09\r\nContent-Disposition: form-data; name="example"\r\n\r\ntest\r\n------------------------------4ebf00fbcf09--\r\n' http://localhost:3000/test

这两个示例包括分号,但您可以根据需要将其删除。

我曾经/正在使用curl,但正如我在问题中所解释的那样,我无法使用它来调整请求头数据。 - sdoca
我已经更新了我的答案,我非常确定你可以这样做。避免使用便利的方法,直接指定头文件。 - William Denniss
谢谢。我不再需要调整,但如果需要,知道可能有另一种选择也很好。 - sdoca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接