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