Bild downloaden

11/21/2012 21:50 .Infinite#1
Ich versuche mithilfe von Winsocks ein Bild runterzuladen. Aber am Ende fehlen immer ein paar hundert bytes. Die Länge, die in dem Header steht stimmt scheinbar auch nicht, wenn ich sie mit der tatsächlichen Länge vergleiche...

Code:
using namespace std;
///
///
void download(string link)
{
	ofstream file;
	file.open ("test.jpg");

	packet p(false, "/s/src/1353***891372.jpg", "image******rg");
	string raw_data = p.Send();

	//int length = atoi(string_between(raw_data, "Content-Length: ", "\r\n").at(0).c_str());

	file << raw_data.substr(raw_data.find("\r\n\r\n")+4);
	
	file.close();
}
11/22/2012 14:40 tnd0#2
Http garantiert keineswegs das Bild in einem Paket zu senden, du bekommst warscheinlich nur die ersten 4096byte minus headersize, je nach dem wie der Server / proxy eingestellt ist. Außerdem stimmt die content length Angabe im Header nicht notwendigerweise. Außerdem gibt es dann da noch sowas was sich gzip nennt.
11/22/2012 17:17 .Infinite#3
Also komprimiert scheint es nicht zu sein. Wenn ich das Bild mit meinem Programm und mit dem Browser einzeln runterlade und dann den Inhalt vergleiche ist beides exakt gleich bis auf die letzen paar Bytes (ich bekomme bei meinem Testbild 73kb statt 75kb).

Wenn das Bild in verschiedenen Packets verschickt wird muss ich wohl meine Packet-Klasse anpassen...

Ich hatte anfangs vermutet, dass der String nicht groß genug ist um ein Bild zu speichern (Es ist auf alle Fälle nicht sehr effizient denke ich, da der String immer wieder vergrößert wird), aber dann müsste ja ein Fehler geworfen werden.

Hier nochmal der Header:
Code:
HTTP/1.1 200 OK

Server: cloudflare-nginx

Date: Thu, 22 Nov 2012 16:18:46 GMT

Content-Type: image/jpeg

Content-Length: 76242

Connection: close

Last-Modified: Tue, 20 Nov 2012 04:14:51 GMT

Expires: Sun, 20 Nov 2022 16:18:46 GMT

Cache-Control: public, max-age=315360000

Vary: Origin

CF-Cache-Status: HIT

Accept-Ranges: bytes

Set-Cookie: __cfduid=dd818fa25cda3cca9*********0fbae0d1353601126; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.*****.org
11/23/2012 15:57 tnd0#4
Strings können je nach Platform relativ viel Speicher benutzen ( 17 179 869 184 GiB für 64bit Programme auf Windows z.b.), das sollte kein Problem sein. Untersuch das ganze doch mal mit WireShark oä.