| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

16-03-2011, 22:55
|
|
bofan
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: Berlin / Germany
Beiträge: 154
|
|
Http request
Hallo!
Ich versuche per PHP einen $_POST-REQ an eine webseite zu schicken.
Mein Script
PHP-Code:
$data = "";
$boundary = "---------------------".substr(md5(rand(0,32000)),0,10);
$fp = fsockopen($host, 80);
if($fp) {echo "OFFEN";}
fputs($fp, "POST $path HTTP/1.1\n");
fputs($fp, "Host: $host\n");
// Ab dieser Stelle sammeln wir erstmal alle Daten in einem String
// Sammeln der POST Daten
foreach($postdata as $key => $val){
$data .= "--$boundary\n";
$data .= "Content-Disposition: form-data; name=\"".$key."\"\n\n".$val."\n";
}
$data .= "--$boundary\n";
// Senden aller Informationen
fputs($fp, "Content-length: ".strlen($data)."\n\n");
fputs($fp, $data);
$res = "";
// Auslesen der Antwort
while(!feof($fp)) {
$res .= fread($fp, 1);
}
fclose($fp);
return $res;
}
$postdata = array('name'=>'gustav85', 'betreff'=>'TESTmail', 'text'=>'DAS IST DER TEXT DAZU', 'switch'=>'msgInsert');
echo postToHost ("www.seite.de", 0, "schreiben.php", $postdata);
Nur kommt leider folgende Fehlermeldung:
Code:
HTTP/1.1 400 Bad Request Date: Wed, 16 Mar 2011 21:54:21 GMT Server: Apache Vary: Accept-Encoding Content-Length: 297 Connection: close Content-Type: text/html; charset=iso-8859-1
Bad Request
Your browser sent a request that this server could not understand.
Liegts am Script?
__________________
Beachte: Dumm ist, wer Dummes tut.
|

16-03-2011, 23:28
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
jep, das liegt am Script. Die HTTP-Spezifikation verlangt CRLF als Zeilentrenner.
Edit: Außerdem kann ich nicht erkennen, dass du diese HTTP-Nachricht irgendwo abschließt, was ebenfalls obligatorisch ist. Die Abschlusskennung ist "--" . $boundary . "--".
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
Geändert von AmicaNoctis (17-03-2011 um 08:54 Uhr)
|

16-03-2011, 23:53
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Warum überhaupt mit Boundaries, wenn du nur reine Text-Parameter sendest?
Als application/x-www-form-urlencoded senden, und gut.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

17-03-2011, 08:25
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Und warum überhaupt eine solche selbst gebastelte Lösung?
Fertige Alternativen:
HTTP_Url_Wrapper
cURL
Snoopy
|

17-03-2011, 13:56
|
|
bofan
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: Berlin / Germany
Beiträge: 154
|
|
Was heißt denn:
Zitat:
Warum überhaupt mit Boundaries, wenn du nur reine Text-Parameter sendest?
Als application/x-www-form-urlencoded senden, und gut.
|
?
Wenn ich das Script vereinfachen/verkürzen könnte wäre das klasse. Aber wie?
Ich will wie gesagt nur:
HP öffnen, $_POST-Daten senden.
das enspr. Script auf der HP wird ausgeführt.
und gut. Mehr nicht.
__________________
Beachte: Dumm ist, wer Dummes tut.
|

17-03-2011, 14:00
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Schau dir an, wie der Browser ein normales POST-Formular versendet (bspw. per Firebug) - und mach's analog.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

17-03-2011, 14:00
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Das heißt, dass application/x-www-form-urlencoded einfacher zusammenzubauen ist als multipart/form-data (das was du grad machst). Insgesamt kannst du das alles aber auch CURL überlassen, wenn du dich dafür entscheidest das zu nehmen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

17-03-2011, 22:23
|
|
bofan
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: Berlin / Germany
Beiträge: 154
|
|
Also
jetzt gehts so weit
PHP-Code:
<?php
include_once("mysql/mysql.inc");
function PostToHost($host, $path, $referer, $data_to_send) {
$fp = fsockopen($host, 80);
printf("Open!\n");
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_to_send) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
printf("Sent!\n");
$res = true;
while(!feof($fp)) {
$res .= fgets($fp, 128);
}
printf("Done!\n");
fclose($fp);
return $res;
}
$SELECT = "SELECT * FROM TABELLE WHERE ZEILE = 'WERT' LIMIT 0,1";
$SQL = mysql_query($SELECT);
$DS = mysql_fetch_object($SQL);
$WERT_1 = $DS->BETREFF;
$WERT_2 = $DS->TEXT;
$data = "name=BLIBLABLUB&betreff=".$WERT_1."&text=".$WERT_2."&switch=msgInsert&submit.x=59&submit.y=12";
echo $data;
printf("Go!\n");
$x = PostToHost(
"www.seide.de",
"/index.php",
"www.meineseite.de",
$data
);
?>
Problem ist, wenn $WERT_2 nun mehrzeilig ist, gehts nicht mehr... Wieso?!
__________________
Beachte: Dumm ist, wer Dummes tut.
|

17-03-2011, 22:25
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von bofan
Problem ist, wenn $WERT_2 nun mehrzeilig ist, gehts nicht mehr... Wieso?!
|
Vermutlich, weil du ihn immer noch nicht Kontext-gerecht kodiert hast.
-> urlencode
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

17-03-2011, 22:26
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

17-03-2011, 23:26
|
|
bofan
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: Berlin / Germany
Beiträge: 154
|
|
Hm Komisch Komisch.
Also nun zeigt er mir endlich die Werte richtig an.
PHP-Code:
<?php
error_reporting(E_ALL);
include_once("mysql/mysql.inc"); function PostToHost($host, $path, $referer, $data_to_send) { $fp = fsockopen($host, 80); printf("Open!\n"); 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_to_send) ."\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $data_to_send); echo "<br>".$data_to_send."<br>"; printf("Sent!\n"); $res = ""; while(!feof($fp)) { $res .= fgets($fp, 128); } printf("Done!\n"); fclose($fp);
return $res; } $SELECT = "SELECT * FROM `sg_trp_mail_vorlagen` WHERE trpm_bez = 'Begruessungsmail_neuer_Kamerad' LIMIT 0,1"; $SQL = mysql_query($SELECT); $DS = mysql_fetch_object($SQL); $WERT_1 = rawurlencode ($DS->trpm_betreff); $WERT_2 = rawurlencode ($DS->trpm_text);
$data = "name=gustav85&betreff=".$WERT_1."&text=".$WERT_2."&switch=msgInsert&submit.x=44&submit.y=11";
printf("Go!\n"); $x = PostToHost( "www.schulterglatze.de", "/stammakte/feldpost/schreiben", "http://www.schulterglatze.de/stammakte/feldpost/schreiben", $data );
?>
Nur trägt er nix mehr ein.
Firebug gibt folgendes aus, wenn ich das Manuell eintrage:
Code:
Parameterapplication/x-www-form-urlencoded
betreff TEXT Mail
name gustav85
submit.x 0
submit.y 0
switch msgInsert
text Das ist eine kleine Testmail.
Quelle
Content-Type: application/x-www-form-urlencoded Content-Length: 105 name=gustav85&betreff=TEXT+Mail&text=Das+ist+eine+kleine+Testmail.&switch=msgInsert&submit.x=0&submit.y=0
sowie:
Code:
Anfrage-Header
POST /stammakte/feldpost/schreiben HTTP/1.1
Host: www.schulterglatze.de
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15 ( .NET CLR 3.5.30729; .NET4.0C)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: http://www.schulterglatze.de/stammakte/feldpost/schreiben
Cookie: [ZULANG]
__________________
Beachte: Dumm ist, wer Dummes tut.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|