Post2Host via SSL
bearbeitet von
Hello,
ich mühe mich ab, per PHP Post2Host mit SSL zum Laufen zu bringen.
Leider bekomme ich immer nur die Statusmeldung von Server:
~~~text
HTTP/1.1 400 Bad Request
Date: Mon, 27 May 2019 12:07:32 GMT
Server: Apache/2.2.22 (Debian)
Vary: Accept-Encoding
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
~~~
Das Testscript zum Posten sieht so aus:
~~~php
<?php ### function_post2host.php ###
function PostToHost($host,$path,$data,$ssl=FALSE,$autoport=TRUE,$user=FALSE,$pass=FALSE,$referer=FALSE)
{
//Daten anpassen
if(is_array($data))
{
$data_to_send = '';
foreach($data as $name => $var)
{
$data_to_send .= urlencode($name).'='.urlencode($var).'&';
}
$data_to_send = substr($data_to_send,0,-1);
}
else $data_to_send = 'data=' . urlencode($data);
//SSL einbinden, falls gewünscht
if($ssl === TRUE)
{
$port = 443;
$host = 'ssl://' . $host;
}
else {$port = 80; }
if ($autoport === TRUE)
{
### alter nothing;
}
elseif (is_numeric($autoport))
{
$port = $autoport;
}
else {return false;}
//Verbindung öffnen
if (false === ($fp = fsockopen($host, $port)))
{
return false;
}
stream_set_timeout($fp, 30);
//Header erzeugen
fputs($fp,"POST ".$path." HTTPS/1.1\r\n");
fputs($fp,"Host: ".$host."\r\n");
if($user != "" && $pass != "")
{
fputs($fp, "Authorization: Basic " . base64_encode($user.":".$pass)."\r\n");
}
if (FALSE !== $referer)
{
fputs($fp, "Referer: " . urlencode($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);
//Antwort abfangen
$res = '';
while(!feof($fp))
{
$res .= fgets($fp, 128);
}
//Verbindung schliessen
fclose($fp);
//Antwort zurückgeben
return $res;
}
###--------------------------------------------------------------------
# PostToHost($host,$path,$data,$ssl=FALSE,$autoport=TRUE,$user=FALSE,$pass=FALSE,$referer=FALSE)
$_data = array();
$_data ['eins'] = 'erster Eintrag';
$_data ['zwei'] = 'zweiter Eintrag';
$_data ['drei'] = 'dritter Eintrag';
echo PostToHost("bitworks.de",'/sensor/postresponder.php',$_data,TRUE);
?>
~~~
Im Error-Log des angeposteten Servers ist leider nichts zu finden.
Wo steckt der Fehler? Wie kann sich zum Debugging vorgehen?
Glück Auf
Tom vom Berg
--
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.