PHP Post mit abfragesyntax
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 schreiben
Antwort 1 von henna vom 27.03.2020, 20:41 Options
ja ist möglich. soll es als post- oder get-request übertragen werden?
Antwort 2 von Supermax vom 27.03.2020, 20:51 Options
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 vom 28.03.2020, 07:43 Options
@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.
Antwort 4 von Supermax vom 28.03.2020, 07:57 Options
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 vom 28.03.2020, 08:07 Options
Ah, super danke!
grundkenntnisse bei HTTP-requests... hm, daran mangelts wohl. aber ich werd mich mal versuchen.
vielen dank!
Antwort 6 von Supermax vom 28.03.2020, 08:12 Options
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.
Antwort 7 von howdie vom 28.03.2020, 08:32 Options
DANKE! ich werd mich mal einlesen.
Antwort 9 von henna vom 28.03.2020, 09:42 Options
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.
Antwort 10 von howdie vom 28.03.2020, 10:26 Options
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..
Antwort 11 von son_quatsch vom 28.03.2020, 10:54 Options
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:
<?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.
Antwort 12 von howdie vom 28.03.2020, 11:42 Options
Achso, na klar!!
super!!! vielen vielen dank an alle!!!!!