2017-01-27 2 views
-5

Ich habe eine benutzerdefinierte API-Seite. Wie kann ich die Anzahl der Anfragen per IP-Adresse begrenzen?PHP - Wie schränkt man eine API ein?

Ich brauche einige Beispiele in PHP, ich bin nicht allzu erfahren mit diesem.

Ich betreibe einen Apache2-Server.

+0

Nun, diese Art von Fragen sollte eine Art von Code oder etwas zu beweisen, dass Sie in ständiger Forschung sind und Ihr Bestes versuchen. – manix

+1

Protokollieren Sie die IP, die Anzahl der Anfragen und die Uhrzeit/das Datum ...? Überprüfen Sie die Protokolle für eine bestimmte IP-Adresse und vergleichen Sie sie mit dem konfigurierten Kontingent, egal ob täglich, wöchentlich, monatlich usw. Diese Implementierung kann von trivial (wie ich es geplant habe) bis hin zu anspruchsvoll reichen. Was sind Ihre Anforderungen? –

+0

Beginnen Sie von den Grundlagen. Weißt du, wie man die IP bekommt? Weißt du, wie man sie in einer Datenbank speichert? –

Antwort

0

Sie können die IP der Person, die die API aufgerufen hat, abrufen und sie in eine Datenbank hochladen, wobei die IP und der Zeitpunkt der Übermittlung eingefügt werden. Überprüfen Sie dann oben auf Ihrer API-Seite, ob die IP des Besuchers stimmt (ich bin mir nicht sicher, ob dies mit cURL funktioniert, aber Sie könnten einfach $ _SERVER ['remote_addr'] verwenden) und wenn es auf dem Datenbank, verifizieren Sie, ob etwa eine Stunde von der Einreichung verstrichen ist. In diesem Fall können Sie den Datensatz löschen. Wenn nicht, lassen Sie den Besucher die API aufrufen und seine IP in die Datenbank einfügen.

<?php 
$conn = new mysqli(host,user,password,database); 
$sql = "SELECT * FROM ip"; 
$result = $conn->query($sql); 
while($row = $result->fetch_assoc()) { 
    if($row['ip'] == VISITOR'S IP) { 
     --GET THE TIME OF THE IP SUBMISSION-- 
     if($time > 1hour) { 
      $sql = "DELETE FROM ip WHERE ip="$row['ip']; 
      --LET API WORK-- 
     } 
    } 
} 
$sql = "INSERT INTO ip (ip) VALUES (--VISITOR'S IP--)"; 
$result = $conn->query($sql); 
if(!$result) { 
    echo "SQL Error : ".$sql."<br> Error : ".$conn->error; 
} 
else { 
    $conn->close(); 
} 
?> 

Ich hoffe, das wird Ihnen helfen. Prost!

Verwandte Themen