Tuesday 22 August 2017

Curl Binary Option


É possível usar curl e pós dados binários sem passar um nome de arquivo Por exemplo, você pode postar um formulário usando binário via - data-binário: No entanto, isso requer que um arquivo existe. Eu estava esperando para ser capaz de registrar chamadas HTTP (como para descansar serviços) como o texto do comando curl para reproduzir o pedido. (Isso ajuda muito depurar esses serviços, por exemplo) No entanto, logar curl comandos que fazem referência a um arquivo não seria útil, então eu estava esperando que eu poderia realmente registrar os dados binários brutos, presumivelmente codificado em base64, e ainda assim permitem copiar e Cole o comando curl registrado e execute-o. Então, é possível usar curl e pós dados binários sem fazer referência a um arquivo Se assim for, como isso funcionaria Qual seria um exemplo parecido perguntou May 30 13 às 0:00 slm, acho que você entende mal. Estou registrando minhas chamadas de descanso do lado do cliente para um arquivo de log em texto sem formatação (como o comando curl equivalente literal). No entanto, eu não quero ter que fazer referência a algum arquivo aleatório para cada comando de curvas binárias que eu registro. Eu quero todo o texto do comando curl para ser totalmente auto-contido para que alguém poderia copiar esse texto em um terminal e executá-lo para reproduzir a chamada. Ndash Kirk Woll May 30 13 às 0:09 Você pode passar dados em curl via STDIN assim: The - diz curl para puxar de STDIN. Para encaminhar dados binários para enrolar (por exemplo): Se essa pergunta estiver conectada às suas outras perguntas do Hudson, use o comando fornecido. Você precisa alterá-lo um pouco para ler de um arquivo: Leia a página de manual. Seguindo um resumo para - d Parâmetro. (HTTP) Envia os dados especificados em uma solicitação POST para o servidor HTTP, da mesma forma que um navegador faz quando um usuário preencher um formulário HTML e pressiona o botão Enviar. Isso fará com que curl passe os dados para o servidor usando o tipo de conteúdo application / x-www-form-urlencoded. Compare com o formato - F / -. - d / - os dados são os mesmos que --data-ascii. Para postar dados puramente binários, você deve usar a opção --data-binário. Para URL-codificar o valor de um campo de formulário você pode usar --data-urlencode. Se qualquer uma dessas opções for usada mais de uma vez na mesma linha de comando, as partes de dados especificadas serão mescladas com um símbolo de amplificação separador. Assim, usando - d namedaniel - d skilllousy geraria um post pedaço que se parece com namedanielampskilllousy. Se você iniciar os dados com a letra, o resto deve ser um nome de arquivo para ler os dados de, ou - se você quiser curl para ler os dados de stdin. O conteúdo do arquivo já deve estar codificado por URL. Vários arquivos também podem ser especificados. Colocar dados de um arquivo chamado foobar seria assim feito com --data foobar. Respondeu Jun 9 10 at 17:55 Da página do manual. Eu acredito que estes são os dróides que você está procurando: (HTTP) Isso permite que a onda emula um formulário preenchido no qual um usuário pressionou o botão enviar. Isso faz com que curl para POST dados usando o Content-Type multipart / formulário-dados de acordo com RFC2388. Isso permite o upload de arquivos binários etc. Para forçar a parte de conteúdo a ser um arquivo, prefixe o nome do arquivo com um sinal. Exemplo, para enviar o arquivo de senha para o servidor, onde senha é o nome do campo de formulário para o qual / etc / passwd será a entrada: curl - F senha / etc / passwd mypasswords Então, no seu caso, isso seria algo Como curl - F file / some / file / on / your / local / disk localhost: 8080 respondeu Jun 9 10 at 15:48 Esta solução tem o benefício adicional de ser capaz de nomear o arquivo sendo enviado (ao contrário da solução escolhida acima) , E você pode, por exemplo, Enviar vários arquivos. Ndash David Cairns Jun 14 11 em 20:21 O arquivo de formato é útil se você quiser canalizar seu arquivo pol ndash Steven Lu Jul 24 13 às 6:28 No caso de alguém está olhando para enviar um arquivo e outras informações: use - F keyval - F keyval quantas vezes você precisar. Encerrar todos os parâmetros de postagem em uma grande seqüência de caracteres separada por amp não funciona. Com Jenkins 1.494, eu era capaz de enviar um arquivo para um parâmetro de trabalho no Ubuntu Linux 12.10 usando curl com --form parâmetros: No servidor Jenkins, eu configurei um trabalho que aceita um único parâmetro : Um parâmetro de upload de arquivo chamado myfileparam. A primeira linha dessa chamada curl constrói um formulário web com um parâmetro chamado myfileparam (mesmo que no job), seu valor será o conteúdo de um arquivo no sistema de arquivos local chamado /local/path/to/your/file. txt . O prefixo de símbolo indica ao curl para enviar um arquivo local em vez do nome do arquivo fornecido. A segunda linha define uma solicitação JSON que corresponde aos parâmetros do formulário na linha um: um parâmetro de arquivo chamado myfileparam. A terceira linha ativa o botão de criação de formulários. A quarta linha é a URL do job com o sufixo / build. Se esta chamada for bem-sucedida, curl retorna 0. Se não for bem-sucedido, o erro ou exceção do serviço é impresso no console. Esta resposta toma muito de um borne velho do blog que relaciona-se a Hudson. Que eu desconstruí e re-trabalhei para minhas próprias necessidades. Respondeu Mar 12 13 at 21:58 Heres como você pode POST XML no Windows usando curl linha de comando no Windows. Melhor usar o arquivo batch /.cmd para isso: respondeu Nov 20 13 at 16:16 Se você tiver vários cabeçalhos, então você pode querer usar o seguinte: respondido Jul 23 15 at 5:17 Se você estiver usando curl no Windows: 8 14 at 13:07 Sua resposta 2016 Stack Exchange, IncEnviar e receber arquivos binários usando PHP e cURL Eu estava recentemente trabalhando em um projeto onde eu tinha para enviar e receber arquivos binários para e de uma API REST. Então eu decidi documentar alguns dos códigos que eu escrevi. Tenha em mente que I8217m extrair todos esses trechos de código de uma classe de PHP personalizado que eu escrevi, então se você estiver trabalhando com uma API, I8217d incentivá-lo a criar uma classe de sua preferência. Configurar um formulário para enviar um arquivo Antes de poder enviar um arquivo binário para uma API, você precisa obtê-lo de algum lugar. No meu projeto esse arquivo veio de um formulário. O formulário pode ser tão simples como este: Observe o atributo enctype é definido como multipart / form-data. Você deve ter este conjunto, caso contrário o arquivo não será enviado. Agarre o arquivo enviado Normalmente, quando você processa um formulário, o conteúdo é encontrado dentro da variável POST global, porém os dados do arquivo estão localizados dentro da variável FILES global. Se você imprimir o conteúdo dos ARQUIVOS na página em que o formulário foi enviado, você verá algo como: O que é incomum nessa matriz é que ao invés de agrupar cada arquivo em uma matriz, cada informação sobre um arquivo é agrupada. Assim, os valores no índice 0 no nome. digitar. Tmpname. Erro e tamanho pertencem a um arquivo. Os dados do arquivo binário estão localizados em um armazenamento temporário no servidor. Neste caso, em / tmp / php5Wx0aJ. Enviar o conteúdo binário via cURL O snippet a seguir envia o arquivo binário para um URL: Let8217s falam sobre cada uma dessas linhas, porque algumas delas dependerão dos requisitos da API que você está usando e podem não ser necessárias. Url é onde cURL irá publicar seus dados. Cabeçalho diz à API que há um arquivo que vem sua maneira. Você pode fornecer mais cabeçalhos adicionando valores adicionais à matriz. Contém uma matriz associativa. O nome do campo depende do que a API espera que ele seja. O sinal no valor informa cURL que we8217re lidar com um arquivo. Token é um token que a API REST espera como um cookie. Geralmente, você faz login na API uma vez durante uma transação e, em seguida, usa um token para todas as solicitações subseqüentes. O cookie é chamado apiToken. Mas isso pode variar dependendo das expectativas do API8217s. CURLOPTRETURNTRANSFER diz ao cURL que queremos uma resposta. CURLOPTPOST diz ao cURL que queremos que nossos dados sejam postados. CURLOPTCOOKIE define o token como um cookie. Por último, observe a última linha: No meu caso eu sei que a resposta I8217m recebendo a partir da API será no formato JSON, razão pela qual I8217m decodificá-lo. Você pode não precisar disso se você receber uma resposta em XML, por exemplo. Isso conclui o envio de um arquivo binário via cURL. Próximo we8217ll olhar para recuperar esse arquivo. Recupere o conteúdo binário via cURL Here8217s como recuperar um arquivo binário: Nós don8217t tem que ir sobre qualquer coisa, exceto para: CURLOPTHEADER diz cURL que esperamos que haja um cabeçalho. Isso é importante porque ele nos diz que tipo de arquivo está recebendo uma imagem, um documento do Word, um PDF, etc. CURLOPTBINARYTRANSFER informa ao PHP que o resultado conterá dados binários. Muitas pessoas afirmam que você não precisa desta linha. Digo tentar com e sem, só para ter certeza. Agora você tem o arquivo binário com seus cabeçalhos armazenados no arquivo. Dê o arquivo de volta para o usuário Let8217s ir sobre como dar o arquivo de volta para o usuário. Você pode armazenar o arquivo no servidor e dar ao usuário um caminho para o arquivo, ou você pode apenas deixar o PHP lidar com tudo o que na mosca e simplesmente pedir ao usuário para salvar o arquivo. Aqui está como eu fiz isso: Na linha 1 separo o cabeçalho do resto do arquivo. Na linha 2-8 eu analisar o conteúdo do cabeçalho e colocá-los em uma matriz para que eu possa facilmente referência os elementos que eu preciso. Na linha 9 amp10 eu digo ao PHP qual é o tipo de conteúdo eo que o arquivo deve ser chamado. Na linha 11 eu saída todo o conteúdo binário. Juntamente com o cabeçalho, ele solicita que o usuário salve o arquivo (ou o exibe no navegador se ele for uma imagem, por exemplo). Eu quero tocar na função na linha 11: substr (filearray1, 1) No meu caso, o arquivo binário tinha um espaço extra no início do arquivo. A função substr remove isso. I8217m não sei se esse espaço veio da API ou do explodir na linha 1, então se isso doesn8217t trabalhar para você, tente mudar essa linha para: echo filearray1 Esperemos que esta informação vai lançar alguma luz sobre como postar e recuperar arquivos em um Formato binário. Se você tiver alguma dúvida, deixe-os nos comentários abaixo. Mensagem navegação 22 pensamentos sobre ldquo Enviar e receber arquivos binários usando PHP e cURL rdquo Eu quero buscar uma imagem usando curl api e quero mostrar diretamente na caixa extravagante, mas ele está mostrando em formato binário always. Even eu adicionei cabeçalho lá . O mesmo código está funcionando se eu não usar o fancybox. Você pode por favor me ajudar. Você tentou armazenar a imagem em um arquivo temporário, para que você possa incorporá-lo no fancybox Oi, você pode sugerir-me sobre como posso verificar se o meu arquivo é carregado corretamente para o servidor 1) Posso enviar algum tipo de checksum arquivo Para o servidor usando CURL para que o servidor também calcula a soma de verificação no arquivo recebido e compara duas soma de verificação e responder com o código de resposta adequada. Como fazê-lo no CURL Você pode criar um script no servidor que espera dois valores: um checksum e um nome de arquivo. Em seguida, você pode postar esses dois valores usando um cURL. O servidor irá então calcular a soma de verificação do arquivo existente e compará-lo com o que você enviou. Se ele corresponder, você pode retornar algo como true e se doesn8217t, você pode retornar false (e, opcionalmente, remover o arquivo). Assim, a primeira solicitação uploads o arquivo, ea segunda solicitação verifica-lo. Eu tenho o seguinte requisito Carregar uma imagem em formato jpg para o servidor jpegmini e receber a imagem compactada como a resposta Por favor, consulte a documentação abaixo jpegmini Se quebrar o comando acima - X POST 8211 especificar http método POST - H 8216Content-Type: image / Jpeg8217 8211 especificar o conteúdo do corpo é um jpeg 8211data-binary /tmp/input. jpg 8211 enviar /tmp/input. jpg como os dados do pedido 8211output /tmp/output. jpg 8211 store response in /tmp/output. jpg ( Em vez de stdout) Observe que o URL jpegmini é uma instância do AWS Eu estou interrompendo a instância quando não o uso Se você quiser que eu execute a instância, por favor, deixe-me saber Eu quero fazer esse pedido CURL e receber resposta usando o PHP Por favor me ajude Out Você já tentou o seu cURL comando via linha de comando e ele lhe dar a resposta you8217re procurando Se assim for, você já tentou convertê-lo para PHP e foram sem êxito Se assim for, poste o código PHP que você tentou em um Gist para que eu possa tomar Um olhar para ele. Como você define em seu blog, eu tenho mesmo folllow as etapas acima para fazer o upload e download de arquivos usando curl, mas não está funcionando mais. Você pode definir pelos exemplos. Então eu posso entender facilmente. Obrigado Manish Arora I8217ll precisa de um pouco mais de informações. O que especificamente não funciona e que tipo de resposta você está recebendo Quando você diz que não está funcionando mais, ele estava funcionando para você antes de eu usar o seu código e como você diz que o popup de download será exibido no navegador do cliente, mas não mostrar e exibir apenas O conteúdo do arquivo. Então, como fazer o download do arquivo, por favor descreva-o aqui. Obrigado antecipadamente Manish Primeiro, gostaria de ecoar Content-Type e Content-Disposition para garantir que aqueles estão certos. Em segundo lugar, você tentou ecoar filearray1 sem usar substr (). Em terceiro lugar, para testar, salve o arquivo no disco, faça o download e, em seguida, abra-o para verificar se o arquivo foi transmitido de volta para você corretamente. Obrigado pela mensagem informativa. Eu tenho banging minha cabeça sobre este problema de fazer o upload de um formulário com o arquivo usando curl, mas simplesmente can8217t descobrir o que está errado com o meu código. Aqui está o meu código: Mas quando eu vejo minha saída de curlgetinfo. Eu vejo que o tipo de conteúdo é ainda 8220text / html8221, onde como todos os documentos que eu vi sugerir que, uma vez que você adicionar um arquivo para postfields, curl converte automaticamente o tipo de conteúdo para 8220multipart / form-data8221. Recebo os dados do outro formulário, mas não obter dados do arquivo onde estou postando meus dados. Não tenho certeza que estou fazendo errado aqui. Quaisquer idéias que eu estou no php 5.5, portanto, acrescentando 82168217 para o caminho do arquivo não está funcionando, uma vez que é obsoleto. Eu não usei a classe CURLFile, mas sua sintaxe parece certa. Experimente configurar manualmente o cabeçalho para multipart / form-data usando a opção CURLOPTHTTPHEADER: Além disso, no que diz respeito a você não obtendo o arquivo, you8217ve verificado ARQUIVOS e estava vazio Eu tentei manualmente definindo o contenttype para 8220multipart / form-data8221, mas não tem efeito. E eu tenho a seguinte saída: Dê o código de uma tentativa e ver se você obter um resultado diferente. Se isso não funcionar, certifique-se de que as permissões de imagem estejam corretas, experimente uma imagem diferente (talvez menor) e certifique-se de que o PHP pode gravar no diretório tmp. I8217m basicamente pensando it8217s algo diferente de seu código. PS: Eu notei que myimge. jpg estava mal escrito, portanto, certifique-se de que existe um arquivo com esse nome (falta a letra 8216a8217 na imagem). Obrigado pela ajuda. Seu código parece o mesmo que o meu e yetl eu obter resultado diferente. Eu estou querendo saber se tem a ver com o quadro que estou usando. Estou usando o Kohana 3.3 e capturar o objeto de solicitação no meu api para obter as variáveis ​​pós. Vou ver se há algum problema nessa frente. Por favor, deixe-me saber se você tem alguma experiência com Kohana. Eu comecei desde o início, excluído todo o meu código. Em seguida, copiou o código e testou-o, e funcionou. Parece que eu tinha algo no código que estava fazendo não funcionar direito. Não tenho certeza o que foi embora. Muito obrigado por sua ajuda. Grande, contente de ouvir (menos a parte que nós don8217t saber o que realmente causou o problema). Ryan, espero que você continue monitorando esse tópico. Obrigado antecipadamente para revisar este sentimento I8217m muito estúpido sobre isso e estou disposto a pagar por alguém smarts else8217s em um negócio de consultoria. I8217m tentando escrever um receptor para a seguinte linha de comando curl: Onda - d it20010002.xml - H 8220Content-Type: application / xml8221 upofx. proautomation / w2uploadtest. php gt it20010002e. xml Aqui é a minha cfile código de remetente, 8220name8221 gt 8220it20210001. xml8221) curlinit recurso () curlsetopt (resource, CURLOPTURL, url) // curlsetopt (resource, CURLOPTHTTPHEADER, cabeçalho) curlsetopt (resource, CURLOPTRETURNTRANSFER, 1) curlsetopt (resource, CURLOPTPOST, 1) curlsetopt (resource, CURLOPTPOSTFIELDS, params) curlexec resultado (Recurso) vardump (curlgetinfo (recurso)) echo 8220result8221 vardump (resultado) curlclose (recurso) echo 822082128212resultresult821282118220 gt Aqui está o código do meu receptor: ltphp echo quotinside w2uploadtest8221 uploaddir realpath (8216./8217). 8216/8217 uploadfile uploaddir. basename (FILES8216file82178216name8217) echo 8216Here é o que happens8217 if (moveuploadedfile (FILES8216file82178216tmpname8217, uploadfile)) eco 8220File é válido, e foi uploaded. n8221 com sucesso o mais eco attackn8221 upload do arquivo 8220Possible eco 8216Here algumas informações mais depuração: 8217 printr (FILES) echo 8220nn8221 printr (POST) echo 8220returning back8221 gt meus variáveis ​​retornaram são: array (size26) 8216url8217 cadeia gt 8216upofx. proautomation / w2uploadtest. php8217 (length48) 8216contenttype8217 gt nula 8216httpcode8217 gt int 0 8216headersize8217 gt int 0 8216requestsize8217 gt int 0 8216filetime8217 gt int -1 8216sslverifyresult8217 gt int 0 8216redirectcount8217 gt int 0 8216totaltime8217 GT flutuar 0,109 8216namelookuptime8217 gt flutuador 0 8216connecttime8217 GT flutuar 0,031 8216pretransfertime8217 gt flutuador 0 8216sizeupload8217 gt flutuador 0 8216sizedownload8217 gt flutuador 0 8216speeddownload8217 gt flutuador 0 8216speedupload8217 gt flutuador 0 8216downloadcontentlength8217 gt flutuador -1 8216uploadcontentlength8217 gt flutuador -1 8216starttransfertime8217 gt flutuador 0 8216redirecttime8217 gt flutuador 0 8216redirecturl8217 cadeia gt 8221 (length0) 8216primaryip8217 gt cadeia 821650.246.192.2008217 (length14) 8216certinfo8217 gt array (size0) 8216primaryport8217 vazia gt int 443 8216localip8217 cadeia gt 8216192.168.0.448217 (length12) 8216localport8217 gt int 59.452 82.128.212 resultado 82128211 postResult Você pode descrever o que você está tentando realizar eo que você está correndo em

No comments:

Post a Comment