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

sdo*_*oca 5 testing post http multipartform-data apache-commons

我试图找到一个工具,允许我测试multipart/form-data POST请求并调整请求.具体来说,我想测试内容类型标题中是否存在分号:

multipart/form-data; boundary=140f0f40c9f411e19b230800200c9a66
Run Code Online (Sandbox Code Playgroud)

我们有一个不发送分号的客户端,我们的新servlet(使用Apache Commons FileUpload)无法解析上传的文件.旧版本的servlet使用不同的库方法来接受/解析请求,它可以解析文件.在我通过包含分号来证明请求将成功之前,客户端应用程序的所有者不希望对其进行任何更改.

我一直在使用cURL来对servlet运行我的测试,但我不能调整它生成的请求以排除分号.我已经尝试了Firefox和Fiddler的Poster插件来生成测试POST请求,但是它们导致了这个错误:

org.apache.commons.fileupload.FileUploadException: Stream ended unexpectedly
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*iss 1

您可以用于curl测试这些库,这是使用 multipart/form-data POST 的示例:/sf/answers/753567111/

我喜欢像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
Run Code Online (Sandbox Code Playgroud)

如果不使用中间文件更方便,你可以像这样写一行:

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
Run Code Online (Sandbox Code Playgroud)

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