[PHP]POST en GET vraagje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • IceQb
  • Registratie: Augustus 2002
  • Laatst online: 12-09 09:59
Ik wil een pagina op internet gebruiken om in te lezen, te verwerken enz. Om deze pagina te mogen lezen moet je met POST een user en password invoeren. Die informatie heb ik, maar ik kan dus niet iets doen als:
PHP:
1
2
3
4
$lines=file("remotefile.php?name=mrx&pass=secret");
foreach($lines as $line) {
    echo $line;
}

De pagina MOET de info als POST ontvangen en niet als GET. Als ik iets in de richting doe van:
code:
1
2
3
4
5
<form method="post" action="remotefile.php">
<input type="hidden" name="name" value="mrx">
<input type="hidden" name="pass" value="secret">
<input type='submit' value='Klik hier'>
</form>

Dan kom ik gewoon op de desbetreffende pagina terecht en is er niks aan de hand. Nou ben ik dus benieuwd of php de file voor mij kan lezen en kan verwerken met een POST zónder dat ik naar de pagina wordt doorverwezen met mn browser...
Ik vond een script op php.net dat iets in die richting probeert maar die kreeg ik niet aan de praat...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*lukas at MORESPAM dot jhu dot edu
05-Mar-2005 04:29
Here's a function that I needed and couldn't use CURL... it helps you
if you want to send the POST data (instead of GET) from one form
to 2 or more other PHP scripts.  Trust me... it's a life saver!!
*/

     function HTTP_Post($URL,$data, $referrer="") {

       // parsing the given URL
       $URL_Info=parse_url($URL);

       // Building referrer
       if($referrer=="") // if not given use this script as referrer
         $referrer=$_SERVER["SCRIPT_URI"];

       // making string from $data
       foreach($data as $key=>$value)
         $values[]="$key=".urlencode($value);
       $data_string=implode("&",$values);

       // Find out which port is needed - if not given use standard (=80)
       if(!isset($URL_Info["port"]))
         $URL_Info["port"]=80;

       // building POST-request:
       $request.="POST ".$URL_Info["path"]." HTTP/1.1\n";
       $request.="Host: ".$URL_Info["host"]."\n";
       $request.="Referer: $referer\n";
       $request.="Content-type: application/x-www-form-urlencoded\n";
       $request.="Content-length: ".strlen($data_string)."\n";
       $request.="Connection: close\n";
       $request.="\n";
       $request.=$data_string."\n";

       $fp = fsockopen($URL_Info["host"],$URL_Info["port"]);
       fputs($fp, $request);
       while(!feof($fp)) {
           $result .= fgets($fp, 128);
       }
       fclose($fp);

       return $result;
     }

     $output1=HTTP_Post("http://www.server1.com/script1.php",$_POST);
     $output2=HTTP_Post("http://www.server2.com/script2.php",$_POST);

Is het script ergens anders voor bedoeld? (Volgens mij wel nl... maar zijn basics wel hetzelfde) Is het slim om zo'n script hier voor te schrijven? (Ik zou denken dat het makkelijker kan). Sorry voor deze te lange startpost maja bewijst iig dat ik genoeg zelf heb geprobeerd :). O en voordat iemand cURL zegt, dit kreeg ik ook niet aan de praat op mn WinXPSP2+IIS5.1+PHP...

Acties:
  • 0 Henk 'm!

Verwijderd

Het principe is toch duidelijk? Voor een POST request kun je een socket openen, en een request doen bij die andere server. Je moet alleen even zelf de HTTP request samenstellen. Hoe je dat precies doet, welke opties je toevoegt, dat doet er allemaal niet zoveel toe. :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Het stuk code dat je post ziet er gewoon goed uit, voor zover ik kan zien moet dat gewoon werken. Wat werkt er niet aan?

Verder is er een veel makkelijkere manier om te doen wat je in je eerste stukje code doet: kijk eens naar de functie fpassthru.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 05-08 09:21

Not Pingu

Dumbass ex machina

IceQb schreef op zaterdag 19 maart 2005 @ 19:17:
Nou ben ik dus benieuwd of php de file voor mij kan lezen en kan verwerken met een POST zónder dat ik naar de pagina wordt doorverwezen met mn browser...
Ik denk niet dat dat mogelijk is op deze manier. De enige manier (niet de enige maar daar later meer over) waarop je webserver uberhaupt kan weten wat voor informatie er ingevoerd is, is doordat de data wordt meegestuurd met een nieuw request. Dat is nou eenmaal hoe HTTP werkt. Je kunt wel de pagina naar zichzelf laten submitten en dan niet meer het loginformulier weergeven maar een melding dat de gebruiker ingelogd is. Of, als er een fout is gemaakt, weer het loginformulier laten zien met de foutmelding erbij.

Er zijn wel manieren om data naar de server te sturen zonder een postback. Eentje is bijv. een hidden iframe waarin je met javascript dus een request doet naar de pagina die je login verwerkt. Er omslachtig en onveilig. Dan is er nog XMLHTTP, dat ook in javascript werkt en je in staat stelt om data heen en weer te sturen naar PHP zonder een postback. Meer info daarover vind je hier.

Dat stukje code wat je had gevonden, is om data nog een keer naar een tweede PHP pagina te sturen als het al een keer naar een PHP pagina is verzonden. Je kunt daar dus niet die eerste stap uithalen. PHP weet pas wat er in je browser is ingevuld op het moment dat je dat opstuurt. Javascript is imho echter geen goede methode om wachtwoorden te versturen.

[ Voor 14% gewijzigd door Not Pingu op 19-03-2005 21:22 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


Acties:
  • 0 Henk 'm!

Verwijderd

Hier heb je een script:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$options = array(
  'http'=>array(
    'method'=>"POST",
    'header'=>"Content-type: application/x-www-form-urlencoded\r\n" .
              "Content-length: " . strlen($volledig),
    'content'=>"Volll=$nummer"
  )
);

$alternate = stream_context_create($options);


$file = fopen('http://www.gebeld.nl/content.asp?zoek=numm', "r", false, $alternate);
   while(!feof($file)) {
   $data .= fread($file, 1024*8);
       }
?>


Dit script gebruik ik om telefoonnummers op te zoeken. Je moet bij content de variabelen zetten. Ik moest hierboven bijvoorbeeld de name ingeven van de tekstkbox op het formulier waar een nummer in staat (Volll). Als je meerdere textboxname's met variablen (in jouw geval gebruikersnaam en wachtwoord) wilt gebruiken moet je die scheiden door een komma.

Acties:
  • 0 Henk 'm!

Verwijderd

Oops, ik ben ff een belangrijk detail vergeten in mijn vorige bericht: de variabele $volledig is het aantal tekens wat in 'content'=>"Volll=$nummer". Dus als je nummer 1234 is, dan heeft $volledig als waarde 10. (Volll=1234)

Acties:
  • 0 Henk 'm!

  • IceQb
  • Registratie: Augustus 2002
  • Laatst online: 12-09 09:59
harstikke bedankt beide scripts werkend gekregen! :)
Pagina: 1