Http 如何测试多部分/表单数据POST请求

Http 如何测试多部分/表单数据POST请求,http,testing,post,apache-commons,multipartform-data,Http,Testing,Post,Apache Commons,Multipartform Data,我正在尝试找到一个工具,它允许我测试一个多部分/表单数据POST请求并调整请求。具体来说,我想测试content-type标题中是否有分号: multipart/form-data; boundary=140f0f40c9f411e19b230800200c9a66 我们有一个不发送分号的客户端,我们的新servlet(使用ApacheCommonsFileUpload)无法解析上传的文件。旧版本的servlet使用不同的库方法来接受/解析请求,它可以解析文件。在我通过添加分号证明请求成功之前

我正在尝试找到一个工具,它允许我测试一个多部分/表单数据POST请求并调整请求。具体来说,我想测试content-type标题中是否有分号:

multipart/form-data; boundary=140f0f40c9f411e19b230800200c9a66
我们有一个不发送分号的客户端,我们的新servlet(使用ApacheCommonsFileUpload)无法解析上传的文件。旧版本的servlet使用不同的库方法来接受/解析请求,它可以解析文件。在我通过添加分号证明请求成功之前,客户端应用程序的所有者不想对其进行任何更改

我一直在使用cURL对servlet运行测试,但我无法调整它生成的请求以排除分号。我尝试了Firefox和Fiddler的Poster插件来生成测试POST请求,但它们导致了以下错误:

org.apache.commons.fileupload.FileUploadException: Stream ended unexpectedly

是否有人找到了使用上载文件成功测试多部分/表单数据发布请求的方法?

您可以使用
curl
来测试这些库,下面是使用多部分/表单数据发布的示例:

对于像curl这样的命令行工具,我喜欢的一点是它很容易重复(在bash、up和enter中),并且可以保存测试供以后使用

编辑:您完全可以发送要测试的自定义标题。关键是使用curl的原始命令,而不是为您格式化请求的方便方法。使用
-H
传入原始标头,并使用
--data binary
传入文件正文,而不更改行尾(对于多部分/表单数据非常重要,必须具有CRLF行尾)。下面是一个例子:

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,但正如我在问题中所解释的,我无法使用它来调整请求头数据。我已经更新了我的答案,我相信您可以做到这一点。避免使用方便的表单方法,直接指定标题。谢谢。我不再需要做调整,但很高兴知道,如果需要再次出现,可能还有另一种选择。