Die Simulation einer POST mit PHP & cURL

Ich versuche zu simulieren, die einen BEITRAG zu einer website, basierend auf was ich kommen sehe, aus HTTP Live headers im Firefox.

Hier ist ein kopieren/einfügen der log aus der Firefox plugin:

POST /Kontext?tab=login HTTP/1.1
Host: website
User-Agent:
Mozilla/5.0 (X11; U; Linux i686;
en-US; rv:1.9.2.13) Gecko/20101206
Ubuntu/10.10 (maverick)
Firefox/3.6.13
Übernehmen:
text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset:
ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Anschluss:
keep-alive
Referer: referer
Cookie: fontsize=2;
JSESSIONID=0000pXE_BK7TjZFzEyNHqOKzXz2:-1
Content-Type:
application/x-www-form-urlencoded
Content-Length: 46
loginid=password&password=password&login=Login

Und die Antwort folgt sofort nach dem POST:

HTTP/1.1 302 Found
Ort:
website/Kontext?tab=p00689
Content-Language: en-US
Set-Cookie:
JSESSIONID=0000oaKlIeeDRWkX5YCiJu5v1lM:-1;
Path=/
Transfer-Encoding:
chunked
Datum: Mon, 07 Feb 2011
14:15:21 GMT
Server: WebSphere
Application Server/6.1
Abläuft:
Thu, 01 Dec 1994 16:00:00 GMT
Cache-Control: no-cache="set-cookie",
set-cookie2"

Basierend auf meinen Tests, eine Antwort, die Umleitungen zu

website/Kontext?tab=p00689

Bedeutet, dass der Nutzer authentifiziert wurde und alles funktionierte einwandfrei.

Aber, wenn man versucht, dies zu erreichen über PHP & cURL, bin ich auf eine Seite umgeleitet, die dem Benutzer darüber informiert, dass Ihre Sitzung abgelaufen ist.

Hier der code:

//Provider only likes Firefox
$agent = "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13";

ini_set("user_agent", $agent);

//Cookie
$cookie = tempnam("/tmp", "curlcookie");

//Post everything that was posted to me.
$fields = $_POST;

foreach($fields as $key=>$value)
{
        $fields_string .= "$key=$value&";
}

$fields_string = substr($fields_string, 0, strlen($fields_string) - 1);

//Custom headers
$headers = array(
        "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language: en-us,en;q=0.5",
        "Accept-Encoding: gzip,deflate",
        "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7",
        "Keep-Alive: 115",
        "Connection: keep-alive");

//cURL options
$ch = curl_init("website");

curl_setopt($ch, CURLOPT_REFERER, "referer");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$output = curl_exec($ch);
$header  = curl_getinfo($ch);

curl_close($ch);

//Debugging junk
echo nl2br($header["request_header"]);
echo "<br/><br/>Output:<br/><br/>$output";

Die Ausgabe dieses Skripts lautet wie folgt:

POST /Kontext?tab=login HTTP/1.1
User-Agent: User-Agent: Mozilla/5.0
(X11; U; Linux i686; en-US;
rv:1.9.2.13) Gecko/20101206
Ubuntu/10.10 (maverick)
Firefox/3.6.13
Host: website
Pragma: no-cache
Referer:
referer
Übernehmen:
text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset:
ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Anschluss:
keep-alive
Content-Length:
46
Content-Type:
application/x-www-form-urlencoded

loginid=username&Passwort=Passwort&login=Login

Ausgang:

HTTP/1.1 302
Fand
Lage:website/Kontext?tab=p00697
Content-Language: en-US Set-Cookie:
JSESSIONID=0000Tl8NL1Hg2dbNv_PEnq-bbvr:-1;
Path=/Set-Cookie:
JSESSIONID=0000Zue58y1tXg3tt4XjB8exXw6:-1;
Path=/Transfer-Encoding: chunked
Datum: Mon, 07 Feb 2011 19:18:20 GMT
Server: WebSphere Application
Server/6.1 Expires: Thu, 01 Dec 1994
16:00:00 GMT Cache-Control:
no-cache="set-cookie
set-cookie2"

Basierend auf dem, was ich gepostet habe, ist es etwas offensichtlich, dass ich bin fehlt? Was sollte ich als Nächstes versuchen? Die Anfragen schauen Sie semantisch das gleiche; ich bin mir nicht sicher, was ich tun könnte falsch.

Was ist mit der Cookie-header aus der ursprünglichen POST?
Der cookie ist erforderlich, damit der post komplett ist nicht von server 1, aber der Ziel-server als cookie erstellt auf dem login-Zeitpunkt. ich glaube,
Richtig, RobertPitt. Danke für die Kommentare.
Sieht aus wie ich war nicht klar. Der original-BEITRAG, der gezeigt hat, ein Cookie-header. Die hergestellten POST nicht. Wenn der server ein cookie gesetzt (und die Beurteilung durch 'JSESSIONID') kann es einige damit verbundenen Daten, insbesondere session/user, die einen Fehler verursacht, wenn die hergestellten POST hat der server auch ohne cookie
Guter Punkt, Tippfehler.. ich werde versuchen, und sehen, was passiert.

InformationsquelleAutor Ian P | 2011-02-07

Schreibe einen Kommentar