Toon posts:

[c++] Opslaan van JPG vanaf webserver

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben bezig een kleine app te maken die om een bepaalde tijd een plaatje van een website download en opslaat. (dat plaatje komt van een webcam en verandert steeds)

het verbinden met de server is geen enkel probleem. en ook het binnen halen van het plaatje gaat meteen goed. wat fout gaat is het opslaan. volgens mij mis ik namelijk een correcte JPEG header in de data die ik krijg.

wanneer ik dat plaatje via http door krijg, moet ik dan zelf de http header vervangen voor een jpeg header?

ik probeer nu te downloaden: http://www.raceeend.net/thevoices.jpg

met o.a. de volgende code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//hierboven een winsock geopend naar www.raceeend.net:80
sprintf(buff,"GET %s/%s HTTP/1.1\r\nHost: %s\r\n\r\n", filepath, filename, servername);
send(conn,buff,strlen(buff),0);

ofstream myfile;
myfile.open ("example.bin",ios::binary|ios::trunc);

//Writing to file
while(recv(conn,buff,512,0))
{
    myfile<<buff;
    cout<<buff<<endl;
}
myfile.close();
cout<<"done";


wanneer ik nu de output bekijk met een hex viewer, zie ik wel deels de jpg header staan maar lang niet alles.

er staat eerst wat 'troep', de http header gevolgd door een aantal hex getallen die ik niet herken, dan komt netjes de SOI, gevolgd door de JFIF. maar vervolgens zie ik niet de jfif identifier er in staan.

zou iemand mij kunnen vertellen hoe ik plaatjes van het web kan opslaan vanuit C++?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 23:31

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat je terugkrijgt is niet letterlijk alleen de binary contents van die file, zoals je zelf ook al doorhad. Een goede HTTP library zal de teruggegeven headers moeten parsen en verschillende encodings aan moeten kunnen.

Handiger is denk ik gewoon om van de WinInet API gebruik te maken, en middels InternetOpenUrl() en InternetReadFile() de file binnen te halen. Weet je zeker dat het goed gaat.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
jah das idd wel een goed idee. kende de hele wininet api nog niet. ga ik eens op googlen. tnx

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 28-11 15:56

killercow

eth0

Verwijderd schreef op dinsdag 12 juni 2007 @ 12:43:
jah das idd wel een goed idee. kende de hele wininet api nog niet. ga ik eens op googlen. tnx
Of curlcpp., ben je nog platform onafhankelijk ook. :)

openkat.nl al gezien?


  • writser
  • Registratie: Mei 2000
  • Laatst online: 28-11 15:44
Curl werkt inderdaad zeer relaxed (http://curl.haxx.se/libcurl/). Nog makkelijker: doe het in Python / Java?

[ Voor 16% gewijzigd door writser op 12-06-2007 13:29 ]

Onvoorstelbaar!