server-PHP-ausgelöster SMSLink via SMSLISTO funktioniert nicht

inquisitor

Aktives Mitglied
Mitglied seit
7 Aug 2004
Beiträge
1,494
Punkte für Reaktionen
8
Punkte
38
Hallo Welt,

Ich habe auf meinem Webserver eine cronjob-ausgelöstes PHP-Skript, das mir täglich eine SMS per SMSLink schickt.

Das ganze funktioniert mit voipwise.com problemlos, aber sobald ich SMSLISTO verwende, scheitert der SMSlink-Aufruf mit der Meldung "session lost" und ich lande auf der Login Seite(https://myaccount.smslisto.com/clx/index.php?part=timeout).

Der PHP-generierte SMSlink ist absolut fehlerfrei - wenn ich mir diesen per echo ausgeben lasse und in meinen Browser einfüge, wird die SMS mir Erfolgsmeldung versandt.

Offensichtlich verweigert der SMSLISTO Server die SMSLinks, die von meinem Server aufgerufen werden. Da ich es auch auf anderen Servern in ganz anderen IP-ranges probiert habe, liegt es auch nicht an der IP-Adresse. Ich vermute, daß SMSLISTO irgendwas am Header nicht mag, aber auch die Veränderung sämtlicher Header Details sowie die Verwendung von GET und POST, HTTP/1.0 und HTTP/1.1 method, waren erfolglos und endeten mit "session lost".

Meine getpage Funktion (unten) rufe ich wie folgt auf:
Code:
getpage("https://myaccount.smslisto.com/clx/sendsms.php?username=username&password=password&from=username&to=+1234567890&text=report");

und das ist die getpage Funktion:
Code:
<?PHP function getpage($url)
{
   // get the host name and url path
   $parsedUrl = parse_url($url);
   $host = $parsedUrl['host'];
   if (isset($parsedUrl['path'])) {
      $path = $parsedUrl['path'];
   } else {
      // the url is pointing to the host like http://www.mysite.com
      $path = '/';
   }

   if (isset($parsedUrl['query'])) {
      $path .= '?' . $parsedUrl['query'];
   } 

   if (isset($parsedUrl['port'])) {
      $port = $parsedUrl['port'];
   } else {
      // most sites use port 80
      $port = '80';
   }

   $timeout = 10;
   $response = ''; 
   // connect to the remote server 
   $fp = @fsockopen($host, '80', $errno, $errstr, $timeout ); 

   if( !$fp ) { 
      echo "Cannot retrieve $url";
   } else {
      // send the necessary headers to get the file 
      fputs($fp, "GET $path HTTP/1.0\r\n" .
                 "Host: $host\r\n" .
                 "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)\r\n" .
                 "Accept: */*\r\n" .
                 "Accept-Language: en-us,en;q=0.5\r\n" .
                 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" .
                 "Keep-Alive: 300\r\n" .
                 "Connection: keep-alive\r\n" .
                 "Referer: $host\r\n\r\n");

      // retrieve the response from the remote server 
      while ( $line = fread( $fp, 4096 ) ) { 
         $response .= $line;
      } 

      fclose( $fp );

      // strip the headers
      $pos      = strpos($response, "\r\n\r\n");
      $response = substr($response, $pos + 4);
   }

   // return the file content 
   return $response;
}
?>

Hat jemand eine Idee, woran es liegt und vor allem, wie man das ganze löst? Oder ist das ganze etwa von Betamax beabsichtigt?

Grüße

Inquisitor
 
Zuletzt bearbeitet:
Ja, wie erwähnt klappt es, wenn ich die vom PHP generierte URL nehme und im Browser aufrufe. An Cookies dachte ich auch schon, aber wenn die in Firefox abschalte, geht es per Browser trotzdem noch.
 
Habe es mal getestet, und mir mal nen smslisto-Account zugelegt (kost ja nix ;-) ).
Also mit erwähntem fincheck Shell Script kann ich so eine SMS erfolgreich über smslisto versenden:

./fincheck sms smslisto user pass text 004917.....

Es werden dabei auch Cookies genutzt.
 
Danke für Deine Mühen.

Habe die Ursache herausbekommen.

voipwise akzeptiert wohl auch unverschlüsselte HTTP requests, während smslisto nur HTTPS mag.

Für eine HTTPS-Verbindung muß man aber dem Parameter $hostname der Funktion fsockopen den Prefix ssl:// voranstellen und dazu auch den Port 443 verwenden.

Mit folgender Funktion geht es nun:
Code:
   $fp = fsockopen('ssl://myaccount.smslisto.com', '443', $errno, $errstr, $timeout );
 
Kostenlos!

Statistik des Forums

Themen
248,908
Beiträge
2,303,661
Mitglieder
378,542
Neuestes Mitglied
webstermalcom51