HTTP POST Request absenden / per Programm Bild uploaden

Biehler

BiehlerProductions
ID: 89792
L
4 Mai 2006
1.948
181
Hallo,
vor kurzem hab ich nach nem Tool gesucht, dass eine Farbe einer GIF Datei auf Transparent setzt.
Da ich nach längerem Suchen nur ganze Bildbearbeitungsprogramme gefundne hab, hab ich mir halt schnell selber ein PHP Script dafür gecodet.

Nun dachte ich mir, ich könnte ja ein Programm basteln, das die Bilder vom PC an die PHP Datei sendet und dann die bearbeitete Datei wieder empfängt.

Rein theoretisch würde das ja ganz simpel mit nem einfachen HTMl Formular, das im Browser ausgeführt wird, gehen.

Aber ich machs lieber richtig mit nem echten programm.

Das problem, ich weis ned, wie der Header dafür aussehen muss.

Also hab ich mir mal ein HTML Formular geholt, ein Upload Script und 2 Hilfsprogramme gecodet.
Das Formular ist so ein typisches "Datei-Upload" Dings.
Das eine Programm fungiert als HTTP Server und gibt mir den Header aus, den der Browser sendet und das 2. Prog wäre der Client, weil ich wissen will, was der Server sendet.

Ich hab also mal meinen Testserver gestartet und mit dem Formular eine Datei geuploadet.
Der IE sendete folgenden Header:
DB "POST /test/upload.php HTTP/1.1",13,10
db "Accept: */*",13,10
db "Accept-Language: de",13,10
db "Content-Type: multipart/form-data; boundary=----------------------------7d72e2d801f8",13,10
db "Accept-Encoding: gzip, deflate",13,10
db "User-Agent: Mozilla/4.0 (compatible; MSIO 6.0; Windows NT 5.1; FDM)",13,10
db "Host: localhost",13,10
db "Content-Length: 1438105",13,10
db "Connection: Keep-Alive",13,10
db "Pragma: no-cache",13,10
db "Cookie: fusion_visited=yes",13,10,13,10,0
(ohne 'db' und den Anführungsstrichen)

Dann hab ich mich gefragt, wo denn da die Informationen zum Bild wären, die stündne normalerwiese ja im Body Bereich, aber da war ja nix.

Also hab ich mir gedacht, evtl. sendet der Server die Meldung "100 Continue". Ich hab also den oben genannten Header an den XAMPP geschickt, der mir dann aber nur nen stinknormalen Header "200 OK" und die Meldung des PHP Scriptes, dass der Upload erfolgreich war, ausgab.
(Davon mal abgesehen, dass der Upload an sich sowieso net funktioniert, ka warum)

Wie und wo wird da das Bild übertragen?
Bzw. eine Datei allgemein?

Da mich der Gedanke net ruhen lies, dachte ich mir, probierts halt einfach, die Bilddatei per POST zu übertragen.
Dürft ja ned so schwer sein.

Aber auch da hatte ich meine Probleme.
Mein zu sendender Testheader sieht so aus:

POST /test/post.php HTTP/1.0 \r\n
Host: localhost\r\n
Content-type: application/x-www-form-urlencoded\r\n
Content-length: 5\r\n
Connection: close\r\n\r\n
a=asd

In der post.php versuche ich, die Variable a auszugeben:
Code:
$a=$_POST['a'];
echo $a;

Ohne Erfolg, obwohl der Header doch stimmen müsste?
Hab ihn nach dem Beispiel hier: https://www.php-faq.de/q/q-code-post.html versucht aufzubauen.
Wo ist da der Fehler?
 
https://www.devx.com/Java/Article/17679/1954?pf=true

Code:
POST register.jsp HTTP/1.1
Host: hi/iq
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2) Gecko/20021126
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,
video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1
Accept-Language: en-us, en;q=0.50
Accept-Encoding: gzip, deflate, compress;q=0.9
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------29772313742745
Content-Length: 452
-----------------------------29772313742745
Content-Disposition: form-data; name="name"
J.Doe
-----------------------------29772313742745
Content-Disposition: form-data; name="email"
abuse@spamcop.com
-----------------------------29772313742745
Content-Disposition: form-data; name="file-upload"; filename="test.txt"
Content-Type: text/plain
test data with some high ascii: ¿Como estás?
-----------------------------29772313742745--

https://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/146306

ein Blick auf die encode_multipart_formdata Funktion hilft auch noch.

db... alter Assemblerfreak ;)
 
vor kurzem hab ich nach nem Tool gesucht, dass eine Farbe einer GIF Datei auf Transparent setzt.
Da ich nach längerem Suchen nur ganze Bildbearbeitungsprogramme gefundne hab, hab ich mir halt schnell selber ein PHP Script dafür gecodet.
Mal weg vom Thema:
ImageMagick ? ;)
 
https://www.devx.com/Java/Article/17679/1954?pf=true

Code:
POST register.jsp HTTP/1.1
Host: hi/iq
[...]
-----------------------------29772313742745--

https://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/146306

ich hab jetzt mal genau den Header an meinem XAMPP geschickt, der gibt mir nen 400er Fehler zurück :think:

Your Browser sent a request that this server could not understand. Request header field is missing ':' separator.

---------------------------29772313742745

Das wär der Header:
Code:
BUFFER DB "POST /test/upload.php HTTP/1.1",13,10
DB "Host: localhost",13,10
DB "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.2) Gecko/20021126",13,10
DB "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1",13,10
Db "Accept-Language: en-us, en;q=0.50",13,10
DB "Accept-Encoding: gzip, deflate, compress;q=0.9",13,10
DB "Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66",13,10
DB "Keep-Alive: 300",13,10
DB "Connection: keep-alive",13,10
DB "Content-Type: multipart/form-data; boundary=---------------------------29772313742745",13,10
DB "Content-Length: 452",13,10
DB "-----------------------------29772313742745",13,10
DB "Content-Disposition: form-data; name='name'",13,10
DB "J.Doe",13,10
DB "-----------------------------29772313742745",13,10
DB "Content-Disposition: form-data; name='email'",13,10
DB "abuse@spamcop.com",13,10
DB "-----------------------------29772313742745",13,10
DB "Content-Disposition: form-data; name='file-upload'; filename='test.txt'",13,10
DB "Content-Type: text/plain",13,10
DB "test data with some high ascii: ¿Como estás?",13,10
DB "-----------------------------29772313742745--",13,10,13,10,0
Dann hab ich nochmal auf die seite, wo ich verlinkt habe, geschaut.
Dort sind vor dem Bodybereich 2* \r\n. Bau ich das ein, tut sich überhaupt nix.

Das Beispiel für den POST Header hab ich noch nicht ausprobiert, werd ich nachher noch machen.

db... alter Assemblerfreak ;)

Gibts etwa noch andere Sprache außer ASM :ugly:

Mal weg vom Thema:
ImageMagick ?

Mist, hätt ich das eher gewusst, hätt ich mir den Ärger gesparrt :ugly:
Aber jetzt isses scho egal, jetzt hab ich angefangen, da ziehs ich auch durch :mrgreen:
 
Was ist da jetzt der Unterschied zum POST ohne Bild, bzw. wie baut man sich so was auf?
POST /wiki/Spezial:Search HTTP/1.1
Host: de.wikipedia.org
Content-Type: application/x-www-form-urlencoded
Content-Length: 24

search=Katzen&go=Artikel
Ich weiss schon: der Firefox sendet viele unötige Header und der Content-Type ist anders.
 
Zuletzt bearbeitet:
Was ist da jetzt der Unterschied zum POST ohne Bild, bzw. wie baut man sich so was auf?

Hm, wenn du so fragst, ist wohl nur der Content-Type anders (bzw. bei nem multipart sind halt mehrer Teile) :think:

Dementsprechend dürfts eh wurscht sein, wenn ich nen stinknormalen POST Header benutze und die POST Variable mit nem PHP Script als Bild speichere.

Nen normalen POST Header hab ich ja jetzt hinbekommen, thx @all.
Weis zwar ned, wo der Fehler im Header war, aber auf jeden Fall gehts jetzt.
 
naja, ist eh wurscht...

THX für den Code, auch wenn du ihn editiert hast.
In der Mail stand er zum Glück drinne ;)

Also mit dem gings wunderbar, nur hab ich jetzt das Problem, dass scheinbar irgendeine Seite (also entweder Server oder Client) die Daten kürzt und zwar insofern, dass er 0x0A oder 0x0D oder beides raushaut, wenn es zum Schluß steht.
Bisher weis ich noch ned, wieso, weshalb und warum, aber da mus wohl irgendwo ein Fehler im Programm sein :think:

Naja, thx@all nochmal :)

Gut zu wisen, dass man hier auch was fragen kann, was über PHP hinausgeht ;)
 
mal so als anmerkung... php kannst du auch auf der konsole benutzten. man könnte es sogar soweit treiben dass man nen bild (oder mehrer) ganz einfach mit "Senden an" (windows-kontext-menü) an das php scirpt übergeben kann.

so mal als ansatz
test.php
PHP:
<?
var_dump($_SERVER["argv"]);
?>

PHP:
php test.php hallo welt
 
php kannst du auch auf der konsole benutzten.
Stimmt, daran hab ich gar net gedacht :think:

Naja ich wollt mich sowieso mal grob mit dem HTTP Protokoll beschäftigen und außerdem braucht man ja immer wieder neue Aufgaben.
Einfach das Bild ans Script übergeben wär ja langweilig :D

Ich werd jetzt mal versuchen eine urlencode() Funktion gebacken zu kriegen.
 
Prinzipiell kann das was du vor hast aber auch GIMP mein ich.

...Also ne bestimmte Farbe in ner Grafik transparent machen...