Estou tentando carregar arquivos de log para pastebin usando CURL.exe em uma máquina Windows 10 em um arquivo em lote (.bat).
O seguinte comando funciona :
curl -X POST -d "api_dev_key=MY_DEV_KEY" -d "api_paste_code=this is a the text to send to pastebin" -d "api_option=paste" "https://pastebin.com/api/api_post.php" -d "api_expire_date=10M"
No entanto, ele só permite o upload de uma única linha , onde eu quero fazer o upload de um arquivo inteiro.
Eu tentei:
curl -X POST -d "api_dev_key=MY_DEV_KEY" -T "logfile.txt" -d "api_option=paste" "https://pastebin.com/api/api_post.php"
Mas curl responde a isso com " Bad API request, invalid api_dev_key
".
Encontrei várias opções, como Maneira fácil de colar a saída da linha de comando para colar serviços de lixeira? , POSTing o conteúdo de um arquivo com CURL e Bash Script para fazer upload de arquivos e dados para Pastebin.com que permitem que você faça upload do conteúdo de um arquivo para pastebin ou canalize um comando para enrolar como uma postagem em unix / bash , mas nenhum deles funciona em lote fazem a diferença no manuseio de tubos.
Qual é a maneira correta de postar um arquivo de log no pastebin de dentro de um arquivo em lotes?
Você está tentando fazer uma solicitação POST de várias partes (assim como a API exige), mas a
-T
opção realmente diz ao curl para usar uma solicitação PUT . PUT é usado exclusivamente para fazer upload de um único arquivo e nada mais; ele não permite vários campos. (É para isso que serve o POST.) Não faz sentido misturar os dois.Então, como você está trabalhando com um formulário, o conteúdo do arquivo também deve ser enviado como um campo de formulário. O nome do campo é
api_paste_code
, e o valor pode ser carregado de um arquivo usando curls<
ou@
operadores:Nesse caso, você provavelmente deveria estar usando
-F
em vez de em-d
qualquer lugar, pois o primeiro gera uma mensagem multiparte MIME que suporta melhor arquivos grandes (especialmente arquivos binários), enquanto o último tenta colocar tudo em uma única string codificada em URL.(Geralmente, o serviço de API deve aceitar ambos, embora seja certamente possível que apenas
-d
funcione.)