Pergunta

Tudo bem, eu passei um bom três dias tentando isso, aqui está o cenário:

Quero baixar um arquivo '.csv' do Google e, em seguida, fazer coisas com os dados do arquivo. É para um aplicativo de console Win32. Eu tenho o último para baixo, eu não posso para a vida de me descobrir como fazer o download do arquivo. Já ouvi falar de libcurl, curlpp, ptypes, rolando meu próprio, apenas usando a API .NET, e foi dito um monte de vezes:

... é só um pedido GET

Bem, isso é tudo muito bem, mas eu deve estar faltando alguma coisa, porque parece que todo mundo estava apenas nascem sabendo como fazer isso. I foram vasculhar livros olhando para descobrir isso e ainda tinha um enorme problema com LNKerrors depois de viajar pela estrada com o "The Art of C ++" por um tempo.

Tudo o que está sendo dito, eu aprendi muito com isso, mas neste momento eu só quero saber como fazê-lo. A API para C ++ está faltando seriamente, nenhum código de exemplo a ser encontrados. Tutoriais on-line são quase inexistentes. E nenhum livro lá fora, parece que isso é importante.

Alguém por favor pode me jogar um bote salva-vidas? Eu sou um homem à beira aqui.

Editar

Por "do Google" Eu quero dizer que eu quero baixar um arquivo .csv que eles host. Um exemplo pode ser encontrada aqui.

Foi útil?

Solução

Você deve ser capaz de dobrar este à sua vontade.

Agora que eu tenha respondido um bocado a sua pergunta. Porque C ++? Nada contra a língua, mas escolher a melhor linguagem para o trabalho. Perl, PHP e Python (e tenho certeza mais) todos têm grande documentação e suporte neste tipo de operação.

Em perl (o que eu estou familiarizado com) é apenas cerca de 3-5 linhas de código.

Outras dicas

Porque não basta usar o que já está aí?

URLDownloadToFile ()

Uma vez que você está na plataforma Win32, há uma construída em libary você pode usar para implementar uma solicitação GET em um relativamente maneira simples: WinInet, que faz parte do Win32 SDK. O referência de base para wininet pode ser encontrado no MSDN.

Esteja avisado que haverá algum frente trenó áspera, se você não está familiarizado com a API Win32. Há um bloco bastante útil de exemplo de código aqui

Você receberá erros vinculador se você deixar de adicionar a referência biblioteca adequada ao seu projeto. Parece que você aprendeu algumas lições já então eu vou mantê-lo breif, mas pode ter certeza que você vai encontrar referências a ambas as bibliotecas e referências de arquivo de cabeçalho que você vai precisar na documentação Win32 (você apenas tem que aprender onde na a página para olhar para ele).

Você não pode fazer isso com a biblioteca padrão. Desde a sua win32, você pode seguir o conselho de Paul Keister.

Mas ter um olhar para libcurl , e uma vez que você está em C ++, eu recomendo POCO é muito útil também. Eles são ferramentas muito úteis!

Outra opção é WinHTTP , que também vem com o Windows.

> nenhum código de exemplo a ser encontrada

???

Dezenas de amostras foram postadas por 15 anos .. Ver em notícias api ng: //comp.os.ms-windows.programmer.win32 (Amostras em C)

(COM, INET, etc)

Eu também foram à procura de um bom http lib para C ++, mas não encontraram o lib 'perfeito'. Boost.Asio é fantástico mas muito baixo nível para uma biblioteca simples http (embora o http exemplos de cliente são um bom começo). A C ++ Networking Biblioteca * (CPP-Netlib) parece que está no caminho certo, construindo uma maior api -level no topo do asio, mas não é muito maduro. Confira o http_client exemplo .

Eu estou indo quer escrever meus próprios wrappers em torno asio ou ampliar (e contribuir) para CPP-netlib a menos que eu posso encontrar uma opção melhor.

(BTW libcurl é não a melhor opção para mim. É uma api muito maior do que eu quero e muito pesado para algo como um cliente HTTP, especialmente em C ++. Não me começar errado, é uma grande biblioteca, mas não é apropriado para um cliente http simples.)

C ++ realmente não tem uma API per se. Para fazer um pedido GET, suas necessidades programa para abrir uma conexão de soquete TCP para o site em questão, e enviar as informações para baixo a tomada em conformidade com a especificação HTTP, consulte aqui . Há provavelmente um número de bibliotecas que você poderia encontrar a ajuda com isso, por exemplo, você pode olhar para o que o programa de código aberto wget usos. Se você está programando-lo sozinho, seria útil usar uma ferramenta de packet sniffing. Você pode ver exatamente o que o seu navegador envia para o servidor web para obter a volta de arquivo, e apenas enviar exatamente essa mensagem. Não é muito difícil, mas é muito difícil. TCP é uma curva de aprendizado muito grande inicialmente.

A propósito, o que você quer dizer com "do Google?"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top