Socket-Problem
gondor
- php
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);
}
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
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