У меня есть клиент, чей клиент использует стороннюю расчетную палату для получения счетов. Мы можем сделать это вручную, экспортировав наши данные в 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>
Ручная подача с использованием их веб-интерфейса работает нормально. Я пытаюсь написать быстрый инструмент, который отправляет нам форму с помощью 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
не пусты.