Gå til innhold

Erfaring med raw HTTP programmering?


Anbefalte innlegg

Jeg prøver å sende en http POST til en webside med en bildefil, jeg har laget hovedgreien og jeg får et OK fra serveren. Men bilde blir ikke registrert. Det er linux, jeg har skrevet det med sockets. Jeg har testet det med en basic request og jeg mottar siden jeg skal motta, så det fungerer. Det er bare et lite problem med dette bildet. Bildet blir lest inn i en array, også sendt bit for bit. Alt ser ut til å funke, bortsett fra at bildet ikke blir lagret!!! Noen som har erfaring med dette?

Lenke til kommentar
Videoannonse
Annonse

Dette går lenger en min webserver var beregnet for, men du må få sendt med mime-en til bildefila. Jeg regner med at dette går i en egen pakke, eller at det er et eget format på det, men jeg var ikke borti denne delen så mye, fordi min webserver hadde en helt annen funksjon.

 

Så da kan jeg ikke hjelp :(

Lenke til kommentar

Ja, jeg sniffer tilkoblingen min lokalt. Også bruker jeg firefox addon Live HTTP headers, merkelig lite problem. Jeg brukt følgende side som kilde; JPEG image upload. Jeg diller videre med dette, er sikkert bare en bit som er feil et sted. :wee:

Angående måten jeg leser inn og sender bildefilen på, kan noen bare bekrefte at jeg ikke har noen C++-språkfeil?

char *bytes;

ifstream bildet;

bildet.open("av2.jpg", ios::in | ios::binary);

long start, slutt, strrelse;

start = bildet.tellg();

bildet.seekg (0, ios::end);

slutt = bildet.tellg();

strrelse = slutt - start;

bytes = new char [strrelse];

bildet.read(bytes, strrelse);

bildet.close();

for (int i =0; i < strrelse; i++)

{

send(sockfd, &bytes,1,0);

}

 

Ser det greit ut :/ ?

Lenke til kommentar

hmmm synes den send funksjonen din ser litt snuskete ut...

nå vet ærlig talt ikke jeg syntaksen på send funksjonen du bruker, men skal det ikke heller være

send(sockfd, bytes, strrelse, 1);

eller noe?

 

jeg regner med at den er lik som fread, dvs.

 

send([socket handle],[array], [chunk_size], [chunks])

 

og hvis du sier at det er 0 chunks, så vil vel ikke funksjonen sende noe som helst?

Endret av GeirGrusom
Lenke til kommentar

Jeg har fikset koden sånn at den sender hele bildet med engang, mye mer praktisk og raskere. En ting jeg ligger merke til når jeg ngrepper output fra mitt program og firefox, så formateres bildetdataene som prikker via mitt program og som mange rare bokstaver via firefox. Hva kan dette komme av? Er det noe gale med bildedataene da kanskje? Nå får jeg iallefall respons ved at bildet som er lagret forsvinner, uten at det nye blir registrert. Og enda en liten teit ting jeg burde ha sett før, serveren svarer ikke HTTP ok til firefox. Den svarer; HTTP/1.1 302 Found. Ergo, jeg tipper det er noe gale med måten bildet blir overført på. Kanskje formatering som ødelegger noe?

Lenke til kommentar

Du burde vel fått HTTP/1.1 200 OK, strengt tatt.

 

10.3.3 302 Found

 

The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.

 

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

 

If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Note: RFC 1945 and RFC 2068 specify that the client is not allowed

to change the method on the redirected request. However, most

existing user agent implementations treat 302 as if it were a 303

response, performing a GET on the Location field-value regardless

of the original request method. The status codes 303 and 307 have

been added for servers that wish to make unambiguously clear which

kind of reaction is expected of the client.

Lenke til kommentar

Greit, jeg er litt nærmere nå. Content-length i headeren, altså lengden på body + binary data burde være statisk så lenge det er samme bildet jeg prøver å laste opp right? Uansett, når jeg sniffer firefox. Og prøver å uploade samme bilde som med programmet mitt så stemmer ikke Content-length, den er ikke det samme. Den burde jo være identisk? Jeg vet at hele bildet blir lest inn i arrayen, jeg har skrevet arrayen til en fil og åpnet den. Den er intakt, så da lurer jeg fælt på hvordan jeg ikke får samme content-length som firefox gjør. Gzip gjelder jo bare filer fra serveren(i hovedsak html) og ikke fra klienten, så den burde ikke være komprimert eller noe. Firefox har selvfølgelig en større og mer innholdsrik header, men det har ingenting å si. Content-length omfatter bare postdata og ikke headeren.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...