我有一个客户,客户使用第三方票据交换所来接收发票。我们可以通过将数据导出为XML,访问特定网站并上传文件来手动完成此操作。相关的HTML表单如下所示:
<form border=0
method="POST"
action="/server?request=send"
enctype="multipart/form-data"
id="uploadform"
name="uploadform"
onsubmit="return checkUpload()">
<H2>Upload</H2>
<p>Server directory:<br>
<input type="text"
id="directory"
name="directory"
value="./"
size="30"></p>
<p>Local file to be uploaded:<br>
<input type="file"
id="file"
name="file"
size="40"></p>
<p><input type="submit" value="Send"></p>
</form>
使用其Web界面手动提交可以正常工作。我正在尝试编写一种快速的工具,该工具使用curl
为我们提交表单。我已经尝试了许多不同的尝试,但是到目前为止,尽管我得到了“文件成功上传” HTML响应,但它们都为空。
我们最初开始尝试使用curl
,因为这是票据交换所公司建议的方式。他们举的例子是这样的:
curl -i -k -H "Content-Type:application/octet-stream" \
-d @test.txt -u username:password \
https://example.com/server?request=send?filename=test.txt?directory=DX001
如果那行不通,我开始查看上面表格中的代码,然后尝试以下操作(与XML文件位于同一目录中):
curl -F "request=send" -F "directory=DX001" -F "file=33823.xml" \
-u username:password -F "enctype=\"multipart/form-data\"" \
-F "id=\"uploadform\"" https://example.com/server
当那个不起作用时,我以为即使在同一目录中,我也要尝试绝对路径:
curl -F "request=send" -F "directory=DX001" -F "file=/Users/chuck/Desktop/33823.xml" \
-u username:password -F "enctype=\"multipart/form-data\"" \
-F "id=\"uploadform\"" https://example.com/server
其中的每一个仅上传一个空文件(具有给定文件名)。
您可能会从完整路径中看出来,如果有必要,我正在macOS上进行。
请注意,表单中的onsubmit
操作只是确保directory
和file
输入都不为空。