ursus contionabundo: API-Server empfindlich und nicht sehr stabil...

Beitrag lesen

Da der Server "sehr empfindlich" ist hier mal als Ausriss ein Teil des vorläufigen Ergebnisses meiner Bemühungen um STABIL andere ( und dann verwertbare ) Antworten als einen "403er" zu erhalten:

<?php

error_reporting( E_ERROR );
if ( isset( $_REQUEST['adresse'] ) && $_REQUEST['adresse'] ) {
    $ort = urlencode( $_REQUEST['adresse'] );
    $agents[]  = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0';
    $agents[]  = 'Mozilla/5.0 (Windows i686; rv:64.0) Gecko/20100101 Firefox/64.0';
    $agents[]  = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36';
    $fakeAgent = $agents[rand( 0, count( $agents )-1 )];
    $fakeIp    = rand( 1, 250 ) . '.' . rand( 1, 254 ) . '.' . rand( 1, 254 ) . '.'.rand( 1, 254 );

	$ch = curl_init( "https://nominatim.openstreetmap.org/?format=json&addressdetails=1&q=$ort&limit=10" );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $ch, CURLOPT_HEADER, 0 );
	curl_setopt( $ch, CURLOPT_FORBID_REUSE, true) ;
	curl_setopt( $ch, CURLOPT_USERAGENT, $fakeAgent );
	if ( defined( CURLOPT_ENCODING ) ) {
		curl_setopt( $ch, CURLOPT_ENCODING, '' ); # ab PHP 7.1 endet alle unterstützten Kodierungen wie identity, deflate und gzip.
	}
	
	if ( isset ( $_SERVER['HTTP_REFERER'] ) ) {
		curl_setopt( $ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER'] );
	}
	
	$header[] = "Accept: application/json,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
	$header[] = "Cache-Control: max-age=0";
	$header[] = "Connection: keep-alive";
	$header[] = "Keep-Alive: 300";
	$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
	$header[] = "Accept-Language: en-us,en;q=0.5";
	$header[] = "Pragma: "; // browsers keep this blank. 
	$header[] = "X-Forwarded-For: $fakeIp"; // Play as proxy
	
	curl_setopt( $curl, CURLOPT_HTTPHEADER, $header ); 


	$trys = 0;
	$daten = '';
	$responseCode = 0;

    while ( 200 != $responseCode && $trys < 5 )  {
		$daten = curl_exec( $ch );
		if ( curl_errno( $ch ) ) {
			echo "<pre>", curl_​error( $ch ); exit;
		}
		$responseCode = curl_getinfo( $ch, CURLINFO_RESPONSE_CODE );
		if ( 200 != $responseCode ) {
			time_nanosleep ( 1, 500000000 ); # 1,5 Sekunden
		}
    }
	
	
	if ( 200 != $responseCode  ) {
		echo "<p>Sorry! Responce Code ist auch nach 5 Versuchen $responseCode - Versuchen Sie es in ein paar Sekunden noch einmal.</p>";
		exit;
	}
	
	curl_close( $ch );
	
    #echo "<pre>"; print_r( $daten ); exit;
#*/

    if ( $daten ) {
		$daten = json_decode( $daten , true );
		foreach ( $daten as $item ) {
			
			if ( isset( $item['address']['city'] )  )
          { $item['address']['county']  = $item['address']['city']; }
			if ( isset( $item['address']['city_district'] )  ) 
          { $item['address']['suburb']  = $item['address']['city_district']; }