Für's Archiv: Ersatz für: PHP - cURL

Beitrag lesen

Alles richtig, aber ...

da cUrl manchmal nicht installiert ist lohnt sich ggf. der Rückgriff auf das Systemprogramm wget. Allerdings kann auch das (wie alle Zugriffe auf exec, system, backtick, etc.) vom eigenen Hoster verboten sein. Ferner kann (oder muss) man die entfernte Webseite auch davon überzeugen, ein ganz normaler Browser zu sein. Falls mehr als Referer und Kennung des User-Agent nötig sein sollten (Cookie, Session, ...) liefert das Manual für wget (man wget) sehr viele wertvolle Hinweise.

Ein aktiviertes $checkCertifikate = '--no-check-certificate'; sorgt dafür, dass beim Transport via HTTPS nicht geprüft wird ob das Zertifikat von einer anerkannten Stelle unterschrieben wurde. Soll die Herkunft der Daten sicher sein, dann geht das natürlich nicht, wird aber (mit wget) immer dann recht aufwendig, wenn auf einem Server die Zertifikate nicht hinterlegt sind, was die Regel ist, weil ja kein Browser existiert. cUrl hat die selbe Kinderkrankheit

 	} else {
          $userAgent = 'Mozilla/5.0 (Windows) Gecko/20100101 Firefox/50.0';
          $referer = 'http://www.example.com/';
          $tmpfile = tempnam( '/tmp', 'php_' );

          $checkCertifikate = '';
          #$checkCertifikate = '--no-check-certificate';

          $sys = 'wget --user-agent=' . escapeshellarg( $userAgent ) . ' --referer=' . escapeshellarg( $referer ) . ' ' . $checkCertifikate . ' -d -O ' . escapeshellarg( $tmpfile ) . ' ' . escapeshellarg( $url ) . ' &2>1';
          echo '<pre>';
          echo "<hr />Fehlermeldungen/Header:<hr />";
          echo `$sys`;
          echo '<hr />Abgeholte Daten:<hr />';
          echo htmlspecialchars( file_get_contents( $tmpfile ) );
          unlink( $tmpfile );
          echo '<hr /></pre>';
}

Es kann aber auch gut sein, dass der Betreiber der entfernten Seite dann sauer wird. Insbesondere wenn er feststellt, dass recht viele Requests erfolgen und er dann auch glaubt, bezüglich des Useragent und/oder des Referer belogen worden zu sein. Immerhin hat er ja vermutlich den Zugriff verboten. Das macht Arbeit und die macht man sich nicht grundlos. Er kann dann auch die IP aussperren. Ich würde genau das tun.