Supportnet / Forum / Skripte(PHP,ASP,Perl...)
PHP Post mit abfragesyntax
Frage
Guten Tag zusammen,
ich würde gerne in PHP programm schreiben dass eine abfragesyntax wie diese "human=1&uin=%s&uin4login=&password4login=123456789"
an eine bestimmte URL schickt.
ist das in PHP möglich?
danke schonmal
mfg
howdie
Antwort 1 von henna
ja ist möglich. soll es als post- oder get-request übertragen werden?
Antwort 2 von Supermax
Dazu kannst du entweder (falls die fopen_url_wrapper auf deinem Server/Webspace aktiviert sind) gleich file_get_contents() oder file() verwenden, ansonsten kannst du die cURL-Funktionen verwenden
Antwort 3 von howdie
@1: POST request sollte es sein.
@2 " fopen_url_wrapper" ist bei mir leider nicht installiert
und für die cURL müsste ich etwas installieren, falls ich das richtig gesehen habe. ich hab aber leider nur einen webspace und keinen (v)server.
aber danke schonmal.
@2 " fopen_url_wrapper" ist bei mir leider nicht installiert
und für die cURL müsste ich etwas installieren, falls ich das richtig gesehen habe. ich hab aber leider nur einen webspace und keinen (v)server.
aber danke schonmal.
Antwort 4 von Supermax
Notfalls kannst du dir auch mit fsockopen() einen eigenen kleinen HTTP-Client basteln; das erfordert aber zumindest Grundkenntnisse über den Aufbau eines HTTP-Requests.
Antwort 5 von howdie
Ah, super danke!
grundkenntnisse bei HTTP-requests... hm, daran mangelts wohl. aber ich werd mich mal versuchen.
vielen dank!
grundkenntnisse bei HTTP-requests... hm, daran mangelts wohl. aber ich werd mich mal versuchen.
vielen dank!
Antwort 6 von Supermax
Hier findest du ein fertiges Codebeispiel für eine einfache HTTP-Abfrage mittels fsockopen(), fwrite und fread(). (Example #1).
Für einen POST-Request wäre das Beispiel allerdings etwas umfangreicher, da du in diesem Fall auch Content-Length und Content-Type als Request-Header übergeben müßtest.
Für einen POST-Request wäre das Beispiel allerdings etwas umfangreicher, da du in diesem Fall auch Content-Length und Content-Type als Request-Header übergeben müßtest.
Antwort 7 von howdie
DANKE! ich werd mich mal einlesen.
Antwort 8 von son_quatsch
Zitat:
Für einen POST-Request wäre das Beispiel allerdings etwas umfangreicher, da du in diesem Fall auch Content-Length und Content-Type als Request-Header übergeben müßtest.
Für einen POST-Request wäre das Beispiel allerdings etwas umfangreicher, da du in diesem Fall auch Content-Length und Content-Type als Request-Header übergeben müßtest.
Dafür wär dieser Kommentar am passendsten: http://at2.php.net/manual/de/function.fsockopen.php#49938
Antwort 9 von henna
hi howdie
hier findest du die nötigen http-infos. ist keine grosse sache!
aus meiner erfahrung gibt es aber zwei stolpersteine:
1. du darfst nicht den ganzen body komplett url-encoden. wenn das so aussieht: "var1=wert1&var2=wert2&..." dann müssen nur alle variablennamen und alle werte kodiert werden. die gleichheitszeichen und kaufmannsünder dazwischen müssen unkodiert bleiben!
2. falls du nach dem login noch seiten runterladen willst, kann es sein dass du auf einen server triffst, der im chunked-transfer-mode antwortet. das ist bei dynamisch generiertem content weit verbreitet.
das bedeutet für dich zusätzliche programmierarbeit. dieser modus ist auch von der formalen beschreibung für nichthochbegabte schwer zu verstehen. ich kapier ihn bis heute nicht vollständig. im supportnet konnte mir da damals auch keiner helfen. ich hab dann aber ein codebeispiel im netz gefunden. melde dich im falle nochmals, dann suche ich dir den link raus. tückisch ist auch, dass man auswirkung einer nicht erkannten chunked-übertragung nicht leicht bemerkt. die html-seiten sehen auf den ersten blick normal aus, nur hin und wieder stehen irgendwo zahlen, wo keine hingehören.
du solltest deshalb auf die response-header achten. da steht es drin.
hier findest du die nötigen http-infos. ist keine grosse sache!
aus meiner erfahrung gibt es aber zwei stolpersteine:
1. du darfst nicht den ganzen body komplett url-encoden. wenn das so aussieht: "var1=wert1&var2=wert2&..." dann müssen nur alle variablennamen und alle werte kodiert werden. die gleichheitszeichen und kaufmannsünder dazwischen müssen unkodiert bleiben!
2. falls du nach dem login noch seiten runterladen willst, kann es sein dass du auf einen server triffst, der im chunked-transfer-mode antwortet. das ist bei dynamisch generiertem content weit verbreitet.
das bedeutet für dich zusätzliche programmierarbeit. dieser modus ist auch von der formalen beschreibung für nichthochbegabte schwer zu verstehen. ich kapier ihn bis heute nicht vollständig. im supportnet konnte mir da damals auch keiner helfen. ich hab dann aber ein codebeispiel im netz gefunden. melde dich im falle nochmals, dann suche ich dir den link raus. tückisch ist auch, dass man auswirkung einer nicht erkannten chunked-übertragung nicht leicht bemerkt. die html-seiten sehen auf den ersten blick normal aus, nur hin und wieder stehen irgendwo zahlen, wo keine hingehören.
du solltest deshalb auf die response-header achten. da steht es drin.
Antwort 10 von howdie
Wow, vielen vielen dank schonmal für die grosse hilfe.
ich habe maldie antwort vorn nr 8 (son_quatsch ) genommen und daraus meinen request gebastelt.
wäre das so richtig?
$host= [URL zum Loginbereich]
$path=explode('/',$host);
$path='/'.(implode('/',$path));
$post="POST $path HTTP/1.1\r\nHost: $host\r\nContent-type: application/x-www-form-urlencoded\r\n${others}User-Agent: Mozilla 4.0\r\nContent-length: ".strlen($query)."\r\nConnection: close\r\n\r\n"human=1&uin=%s&uin4login=&password4login=123456789"";
$h=fsockopen($host,80);
mfg
howdie
ps: weiss leider nicht, wie ich den code hier als Code darstell..
ich habe maldie antwort vorn nr 8 (son_quatsch ) genommen und daraus meinen request gebastelt.
wäre das so richtig?
$host= [URL zum Loginbereich]
$path=explode('/',$host);
$path='/'.(implode('/',$path));
$post="POST $path HTTP/1.1\r\nHost: $host\r\nContent-type: application/x-www-form-urlencoded\r\n${others}User-Agent: Mozilla 4.0\r\nContent-length: ".strlen($query)."\r\nConnection: close\r\n\r\n"human=1&uin=%s&uin4login=&password4login=123456789"";
$h=fsockopen($host,80);
mfg
howdie
ps: weiss leider nicht, wie ich den code hier als Code darstell..
Antwort 11 von son_quatsch
Zitat:
wäre das so richtig?
Nein, du kannst ruhig die komplette Funktionsdeklaration übernehmen und sie anschließend mit dem aufrufen, was du machen willst. Eine vollständige PHP-Datei würde dann so aussehen:wäre das so richtig?
<?php
function post($host,$query,$others=''){
$path=explode('/',$host);
$host=$path[0];
unset($path[0]);
$path='/'.(implode('/',$path));
$post="POST $path HTTP/1.1\r\nHost: $host\r\nContent-type: application/x-www-form-urlencoded\r\n${others}User-Agent: Mozilla 4.0\r\nContent-length: ".strlen($query)."\r\nConnection: close\r\n\r\n$query";
$h=fsockopen($host,80);
fwrite($h,$post);
for($a=0,$r='';!$a;){
$b=fread($h,8192);
$r.=$b;
$a=(($b=='')?1:0);
}
fclose($h);
return $r;
}
$antwort= post('www.seite.de/path/login.php', 'human=1&uin=%s&uin4login=&password4login=123456789');
echo 'Antwort des Servers:<br /><br />'. $antwort;
?>Zitat:
ps: weiss leider nicht, wie ich den code hier als Code darstell..
Code tippen, danach markieren, danach Button Code anklicken.ps: weiss leider nicht, wie ich den code hier als Code darstell..
Antwort 12 von howdie
Achso, na klar!!
super!!! vielen vielen dank an alle!!!!!
super!!! vielen vielen dank an alle!!!!!

