Acesso à conta e ao documento
Baixe um anexo existente de um projeto de portabilidade pertencente à sua conta de API. Use uma conta de API habilitada por meio de HTTPS a partir de um endereço IP permitido. O projeto não pode estar excluído. O identificador do documento é consultado dentro desse projeto; ele não é um link público global de download.
Identificar o documento
Leia a resposta com os detalhes do projeto e use uma entrada da sua lista uploads. A entrada inclui o valor numérico de id, o nome original do arquivo, a extensão armazenada e a URL relativa de download_url. Use o valor do projeto indicado em uniqueid e esse identificador de upload, não o identificador numérico da linha do projeto nem o identificador de uma linha de número telefônico.
Resolva as URLs relativas retornadas somente em relação ao servidor de API confiável que você configurou. O download exige a mesma autenticação da conta; os metadados do documento não concedem acesso sem autenticação.
Solicitar e salvar a resposta
Defina PROJECT_ID e DOCUMENT_ID com os valores do projeto da sua conta. Aplique a codificação de URL ao identificador do projeto. Este exemplo salva os bytes e os cabeçalhos da resposta separadamente, usando um nome de saída local fixo em vez de confiar no nome do arquivo anexo.
curl --silent --show-error --user "$API_USER:$API_PASSWORD" \
--dump-header document-headers.txt \
--output porting-document.bin \
"https://api.multitel.net/v3/lnp/project/$PROJECT_ID/document/$DOCUMENT_ID"A requisição é GET e não tem corpo. Ela lê um único anexo completo, sem paginação específica do endpoint, sem um invólucro JSON e sem um contrato documentado de download por intervalos.
Resposta binária e cabeçalhos
Em caso de sucesso, o corpo contém os bytes armazenados do anexo após a etapa de decodificação do armazenamento legado, não base64 nem um objeto de resposta JSON. O método envia um cabeçalho Content-Disposition de anexo usando o nome de arquivo armazenado, com as aspas duplas removidas. Não há garantia de que o cabeçalho esteja codificado conforme os padrões nem de que seja um caminho de arquivo local seguro; escolha seu próprio nome para o arquivo de destino.
| Extensão armazenada | Content-Type |
|---|---|
| application/pdf | |
| png | image/png |
| jpg, jpeg | image/jpeg |
| doc | application/msword |
| Outros valores | application/octet-stream |
A comparação de extensões não diferencia maiúsculas de minúsculas. O tipo MIME é selecionado a partir da extensão armazenada, não por inspeção do conteúdo, e não garante que o documento seja válido.
Verificar o arquivo baixado
- Verifique tanto o status HTTP quanto os cabeçalhos da resposta. Erros de autenticação ou de consulta podem retornar uma resposta JSON da API em vez de um arquivo. Não considere qualquer corpo não vazio ou arquivo de saída salvo como um download bem-sucedido de um PDF.
- Se o corpo contiver um erro JSON, verifique
status.codeestatus.msg. Mantenha a saída de erro separada do documento esperado. - Verifique se o arquivo resultante não está vazio e se abre como o tipo esperado. Se você conservar o original, compare sua soma de verificação com a da cópia antes de confiar nela.
- Se o resultado estiver vazio, for inválido ou diferir do original, pare e peça à equipe de suporte que verifique o anexo armazenado. Downloads repetidos não reparam o armazenamento.
Compatibilidade com o armazenamento legado
O fluxo atual de upload da API e os componentes de gravação de uploads do portal e do sistema legado que foram revisados armazenam os bytes dos documentos com sequências de escape. Este download reverte esse processo de escape. Os testes sem conexão do manipulador real preservam todos os valores de bytes e as barras invertidas literais para esse formato de armazenamento.
Isso não constitui uma garantia para todos os registros históricos ou importados de fontes externas. O manipulador sempre decodifica o bloco binário armazenado e não detecta se um registro foi importado sem as sequências de escape esperadas. Ele também não recorre a um caminho de arquivo quando um registro não tem um bloco binário armazenado. Esses registros podem produzir bytes alterados ou um resultado vazio. Verifique o resultado e peça à equipe de suporte que investigue o anexo afetado, em vez de alterar um documento do cliente ou presumir que seus metadados comprovam que o arquivo está disponível.
O portal atual usa primeiro esta rota da API e dispõe de mecanismos locais de contingência adicionais. Um download bem-sucedido pelo portal não comprova que todos os registros legados possam ser baixados diretamente por esta API.
Erros e efeitos
Um projeto inexistente, excluído ou que não pertence à conta retorna o código 404 da API com uma mensagem de projeto não encontrado. Um upload inexistente dentro de um projeto pertencente à conta retorna o código 404 da API com uma mensagem de documento não encontrado. Leia os corpos de erro da API, além do status HTTP. Este manipulador não dispõe de uma resposta específica e confiável de não encontrado para um registro que existe, mas não tem bytes armazenados úteis.
O endpoint revisado lê um anexo. Ele não faz upload, não modifica nem remove documentos, não envia solicitações de portabilidade nem debita a conta. Os anexos de portabilidade podem conter informações de identidade, faturamento ou autorização: mantenha-os dentro dos fluxos de trabalho autorizados da conta e fora dos registros públicos, dos sistemas de análise e das capturas de tela da documentação.