gondor: Socket-Problem

Hallo,

eine Frage:

Ich habe ein Forumlar, welches ich auch bearbeiten kann:

Unter http://meineURL/formular.html

<form action="formular.html" type="POST">
<input name="meinData[data][name]" value="">
<input name="meinData[data][email]" value="">
<input name="meinData[data][betreff]" value="">
<input type="submit" value="Senden">
</form>

Ein weitere Formular, welches auf einer fremden Seite liegt:

http://fremdeURL/formular.html

Ich habe ein Formular innerhalb meiner Seite:

<form action="formular.html" type="POST">
<input name="data[data][name]" value="">
<input name="data[data][email]" value="">
<input name="data[data][betreff]" value="">
<input type="submit" value="Senden">
</form>

Ich möchte nun bei einem Submit über http://meineURL/formular.html die Daten nach http://fremdeURL/formular.html
'transportieren', so als wenn ich eigentlich auf http://fremdeURL/formular.html den Submit-Button gedrückt hätte.

Ich bin echt am verzweifeln und weiß einfach nicht mehr weiter. Bin schon mit PHP/Socket angefangen, komme jedoch
nicht weiter. Kann mich hier jemand unterstützen oder schauen, ob ich in die richtige Richtung gehe?

// submit these variables to the server:
$data = array(
'data[data][name]' => meinData[data][name],
'data[data][email]' => meinData[data][email],
'data[data][betreff]' => meinData[data][betreff],
);

list($header, $content) = PostRequest(
"http://meineURL/formular.html",
"http://fremdeURL/formular.html",
$data
);

function PostRequest($url, $referer, $_data) {

// convert variables array to string:
    $data = array();
    while(list($n,$v) = each($_data)){
        $data[] = "$n=$v";
    }
    $data = implode('&', $data);
    // format --> test1=a&test2=b etc.

// parse the given URL
    $url = parse_url($url);
    if ($url['scheme'] != 'http') {
        die('Only HTTP request are supported !');
    }

// extract host and path:
    $host = $url['host'];
    $path = $url['path'];

// open a socket connection on port 80
    $fp = fsockopen($host, 80);

// send the request headers:
    fputs($fp, "POST $path HTTP/1.1\r\n");
    fputs($fp, "Host: $host\r\n");
    fputs($fp, "Referer: $referer\r\n");
    fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
    fputs($fp, "Content-length: ". strlen($data) ."\r\n");
    fputs($fp, "Connection: close\r\n\r\n");
    fputs($fp, $data);

$result = '';
    while(!feof($fp)) {
        // receive the results of the request
        $result .= fgets($fp, 128);
    }

// close the socket connection:
    fclose($fp);

// split the result header from the content
    $result = explode("\r\n\r\n", $result, 2);

$header = isset($result[0]) ? $result[0] : '';
    $content = isset($result[1]) ? $result[1] : '';

// return as array:
    return array($header, $content);
}

  1. Hi gondor,
    aus deinem Posting geht nicht ganz deutlich hervor, wo dein PHP Code denn eingebunden und ausgeführt wird. Aber ich nehme mal an, du arbeitest mit mod_rewrite o.ä. (.html?) und weißt diesbezüglich, was du tust.

    Fehlerbeschreibungen oder so gibts ja keine, aber hast du's anstatt mit fsockopen mal mit CURL probiert? Meine (nur ganz subjektiven) Erfahrungen sind damit eigentlich besser. Insbesondere bei irgendwelchen Shared Server Paketen...

    cheers
    Antipitch

  2. Hello,

    <form action="formular.html" type="POST">

    Nur nebenbei bemerkt: type="POST" sollte vielleicht method="POST" heißen?

    http://de.selfhtml.org/html/referenz/attribute.htm#form

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de