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

时间:2012-07-11 17:07:59

标签: http testing post apache-commons multipartform-data

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

multipart/form-data; boundary=140f0f40c9f411e19b230800200c9a66

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用curl来测试这些库,这是使用multipart / form-data POST的示例:https://stackoverflow.com/a/10765244/72176

我喜欢像curl这样的命令行工具,它很容易重复(在bash,up& enter中),你可以保存测试以供日后使用。

编辑:绝对可以发送您要测试的自定义标头。关键是使用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

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