如何用cURL模拟浏览器向Perl CGI脚本上传文件?
解决Perl CGI脚本的cURL文件上传问题
你的curl命令失败的核心原因是缺少脚本要求的upload参数。
看你的Perl脚本逻辑:只有当$cgi->param('upload')存在时,才会处理上传的文件——这对应浏览器表单里的<input type="submit" name="upload" value="Upload">,提交表单时这个按钮的参数会被一起发送,但你当前的curl命令只传递了文件,没带这个参数,所以脚本还是返回表单页面,不会处理文件。
正确的cURL命令
只需要在原有命令基础上添加upload=Upload参数即可:
curl -X POST -F file_input=@test.txt -F upload=Upload myserver.com/cgi-bin/script.cgi
验证说明
-F upload=Upload模拟了浏览器提交表单时,submit按钮发送的参数,让脚本识别到这是一次上传请求-F参数会自动设置multipart/form-data的请求头,和表单的enctype一致,不用手动指定
额外测试建议
如果想直接提取文件内容(跳过HTML格式),可以用工具过滤标签:
curl -X POST -F file_input=@test.txt -F upload=Upload myserver.com/cgi-bin/script.cgi | sed -n '/<pre>/,/<\/pre>/p' | sed 's/<pre>//;s/<\/pre>//'
内容的提问来源于stack exchange,提问作者creas443
相关产品推荐
相关产品推荐

