Felix Riesterer: HTTPS-Resource via PHP-Socket hinter Proxy laden

Beitrag lesen

Liebe Mitlesende,

ich möchte wie im Titel schon benannt eine HTTPS-Resource laden, die ein PHP-Script hinter einem Proxy über eine Socket-Verbindung vom Webserver anfordert. Folgender Code funktioniert mit http (also ohne s) wie gewünscht (Erfolg durch Trial&Error):

$response = '';
$url = 'https://felix-riesterer.de/';

$h = fsockopen(
  // Host directly or via Proxy?
  (empty($t->settings['proxy-server'])
    ? $t->settings['host']
    : $t->settings['proxy-server']
  ),
  // Port
  (empty($t->settings['proxy-server']) || empty($t->settings['proxy-port'])
    ? 80
    : $t->settings['proxy-port']
  )
);

if ($h !== false) {

  $http = sprintf(
    // generate HTTP request
    'GET http://%1$s/%2$s HTTP/1.1'."\r\n"
      // Proxy Server
      . 'Host: %1$s'."\r\n"
      // Proxy-Authorization?
      . '%3$s'
      . 'User-Agent: %4$s'."\r\n"
      . 'Connection: close'."\r\n"
      // empty line to end HTTP headers
      . "\r\n",
    $t->settings['host'],
    $url,
    (empty($t->settings['proxy-server'])
      ? ''
      : sprintf(
        'Proxy-Authorization: Basic %s'."\r\n",
        $t->settings['proxy-auth']
      )
    ),
    $t->settings['user-agent']
  );

  fputs($h, $http);

  while (!feof($h)) {
    $response .= fread($h, 4096);
  }
}

debug($response); // HTTP/1.1 200 OK\r\nDate: Mon, 04 Jul 2016 11:58:47 GMT\r\nServer...

Wenn ich nun den String mit 'GET http://%1$s/%2$s HTTP/1.1' durch ein s ergänze, damit er nun auf 'GET https://%1$s/%2$s HTTP/1.1' lautet, ändert das nicht das Protokoll - was mich eigentlich auch gewundert hätte.

Muss ich nun als Protokoll ssl://felix-riesterer.de verwenden, oder kann ich die bestehende Codebasis durch eine klitzekleine Anpassung dazu bringen, dass HTTPS verwendet wird?

Liebe Grüße,

Felix Riesterer.