Как я могу загрузить файл, используя `curl` вместо формы?
1306
Chuck
У меня есть клиент, чей клиент использует стороннюю расчетную палату для получения счетов. Мы можем сделать это вручную, экспортировав наши данные в XML, перейдя на определенный веб-сайт и загрузив файл. Соответствующая HTML-форма выглядит следующим образом:
Ручная подача с использованием их веб-интерфейса работает нормально. Я пытаюсь написать быстрый инструмент, который отправляет форму для нас, используя curl. Я пробовал много разных попыток, но пока что каждая, хотя я получаю HTML-ответ «Файл успешно загружен», файл, который они получают, пуст.
Мы изначально начали пытаться использовать, curlпотому что именно так клиринговая компания предложила нам сделать это. Пример, который они привели, был такой:
Каждый из них загружает только пустой файл (с указанным именем файла).
Как вы, вероятно, можете сказать по полному пути, я делаю это из macOS, на случай, если это уместно.
Обратите внимание, что onsubmitдействие внутри формы просто гарантирует, что directoryни fileвходные данные, ни входные данные не пусты.
Вероятно, лучше всего заглянуть в инструменты разработки, прежде чем вручную отправлять форму, как это предлагается в [этом ответе] (https://superuser.com/a/1254742/206587)
davidmneedham 5 лет назад
1
Я полностью согласен с @davidmneedham. Отправьте хорошие поля заголовка HTTP. Кроме того, их веб-интерфейс использует, возможно, уникальный сеансовый cookie (токен).
Jerry 5 лет назад
0
1 ответ на вопрос
2
grawity
Каждый из них загружает только пустой файл (с указанным именем файла).
Керл не знает, какие поля являются обычным текстом, а какие загружаются; он предполагает первое, если вы специально не скажете ему сделать последнее. Чтобы прикрепить файл целиком, вам нужен @префикс:
-F "file=@/Users/chuck/Desktop/33823.xml"
Вы можете дать серверу другое имя файла, например:
Обратите внимание, как неrequest=send является частью данных формы; раньше он был частью URL, теперь он все еще является частью URL. Наконец, хотя все ваши примеры включают в себя аутентификацию, помните, что он работает только для механизма HTTP «Basic», а не для страниц входа на основе форм / cookie.-u