Hallo,
ich möchte mit PHP einen HTTP Post an einen entfernten Webserver senden. Hierzu habe ich folgenden Code geschrieben:
Schön ist schonmal, dass der Code funktioniert, d.h. an der Gegenstelle kommt was an und das Zertifikat (da SSL) wird auch korrekt angewendet. Schlecht ist hingegen, dass die Gegenstelle (Apache Webserver) mir folgenden Fehler ausgibt:
Das war jetzt nicht unbedingt mein Ziel
Fällt jemandem vielleicht ein Fehler in meinem HTTP Header auf? Muss ich bei HTTPS vielleicht noch etwas anderes beachten?
Danke für Eure Mühe,
Exe
PS: bevor jetzt jemand auf die Idee kommt zu sagen "dann bau doch einfach eine Form und schick die per JS ab" --> ganz schlecht, weil ich auf die Rückmeldung vom Server angewiesen bin und ich wüsste jetzt nicht, wie ich eine Server Rückmeldung per JS an mein PHP Skript zur Weiterverarbeitung übergebe ...
ich möchte mit PHP einen HTTP Post an einen entfernten Webserver senden. Hierzu habe ich folgenden Code geschrieben:
function PostToHost($host, $path, $referer, $data_to_send) {
$opts = array('ssl'=>array(
'local_cert'=>"",
'passphrase'=>"",
'capath'=>"c:/2/"));
$context = stream_context_create();
$result = stream_context_set_option($context, 'ssl', 'local_cert', 'c:/2/userzertifikat.pem');
$result = stream_context_set_option($context, 'ssl', 'passphrase', 'ffffffff');
$result = stream_context_set_option($context, 'ssl', 'capath', '');
$fp = fsockopen($host, 80, $errno, $errstr, 5, $context);
printf("Open!\n");
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*\r\n");
fputs($fp, "Referer: https://test/test/\r\n");
fputs($fp, "Accept-Language: de\r\n");
fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Accept-Encoding: gzip, deflate\r\n");
fputs($fp, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Cache-Control: no-cache");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
printf("Sent!\n");
while(!feof($fp)) {
$res .= fgets($fp, 128);
}
printf("Done!\n");
fclose($fp);
return $res;
}
$opts = array('ssl'=>array(
'local_cert'=>"",
'passphrase'=>"",
'capath'=>"c:/2/"));
$context = stream_context_create();
$result = stream_context_set_option($context, 'ssl', 'local_cert', 'c:/2/userzertifikat.pem');
$result = stream_context_set_option($context, 'ssl', 'passphrase', 'ffffffff');
$result = stream_context_set_option($context, 'ssl', 'capath', '');
$fp = fsockopen($host, 80, $errno, $errstr, 5, $context);
printf("Open!\n");
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*\r\n");
fputs($fp, "Referer: https://test/test/\r\n");
fputs($fp, "Accept-Language: de\r\n");
fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Accept-Encoding: gzip, deflate\r\n");
fputs($fp, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; MyIE2; .NET CLR 1.1.4322)\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Cache-Control: no-cache");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data_to_send);
printf("Sent!\n");
while(!feof($fp)) {
$res .= fgets($fp, 128);
}
printf("Done!\n");
fclose($fp);
return $res;
}
HTTP/1.1 400 Bad Request Date: Mon, 10 May 2004 12:52:06 GMT Server: Apache/1.3.26 (Unix) PHP/4.2.3 ApacheJServ/1.1.2 mod_perl/1.27 mod_ssl/2.8.10 OpenSSL/0.9.6g Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 X-Pad: avoid browser bug 169
Bad Request
Your browser sent a request that this server could not understand.
Client sent malformed Host header
Bad Request
Your browser sent a request that this server could not understand.
Client sent malformed Host header
Fällt jemandem vielleicht ein Fehler in meinem HTTP Header auf? Muss ich bei HTTPS vielleicht noch etwas anderes beachten?
Danke für Eure Mühe,
Exe
PS: bevor jetzt jemand auf die Idee kommt zu sagen "dann bau doch einfach eine Form und schick die per JS ab" --> ganz schlecht, weil ich auf die Rückmeldung vom Server angewiesen bin und ich wüsste jetzt nicht, wie ich eine Server Rückmeldung per JS an mein PHP Skript zur Weiterverarbeitung übergebe ...
Kommentar