Eu tenho um cliente cujo cliente usa uma câmara de compensação de terceiros para receber faturas. Podemos fazer isso manualmente exportando nossos dados para XML, indo para um site específico e carregando o arquivo. O formulário HTML relevante é assim:
<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>
O envio manual usando sua interface da web funciona bem. Estou tentando escrever uma ferramenta rápida que envie o formulário para nós usando curl
. Eu tentei muitas tentativas diferentes, mas até agora, cada uma, embora eu receba uma resposta HTML "Arquivo carregado com sucesso", o arquivo que elas recebem está vazio.
Originalmente, começamos a tentar usar o curl
porque foi assim que a empresa de clearinghouse sugeriu que o fizéssemos. O exemplo que eles deram foi isto:
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
Quando isso não funcionou, comecei a olhar para o código no formulário acima e tentei o seguinte (enquanto no mesmo diretório que o arquivo 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
Quando isso não funcionou, pensei em testar o caminho absoluto, mesmo estando no mesmo diretório:
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
Cada um deles só envia um arquivo vazio (com o nome do arquivo fornecido).
Como você provavelmente sabe do caminho completo, estou fazendo isso com o macOS, caso isso seja relevante.
Observe que a ação onsubmit
no formulário simplesmente garante que nem as entradas directory
nem file
estejam vazias.