Ich benutze PHP CURL, um eine Anfrage an einen Server zu senden. Was muss ich tun, damit die Antwort vom Server die IP-Adresse dieses Servers enthält?PHP Curl, Server-IP-Adresse abrufen
Antwort
Dieser kann mit curl durchgeführt werden, mit dem Vorteil, neben der curl request/response keinen weiteren Netzwerkverkehr zu haben. DNS-Anfragen werden durch curl gemacht, um die IP-Adressen zu erhalten, die im ausführlichen Bericht zu finden sind. So:
- Schalten Sie CURLOPT_VERBOSE ein.
- Direct CURLOPT_STDERR zu einem "php: // temp" Stream Wrapper Ressource.
- Mit preg_match_all(), parse die Ressource Zeichenfolge Inhalt für die ip Adresse (n).
- Die antwortenden Server-Adressen werden werden in der Nulltaste Subarray Begegnung Array.
- Die Adresse des Servers kann den Inhalt (unter der Annahme einer erfolgreichen Anfrage) mit end() ausliefern abgerufen. Alle dazwischen liegenden Server-Adressen befinden sich ebenfalls in dem Subarray, in der Reihenfolge.
Demo:
$url = 'http://google.com';
$wrapper = fopen('php://temp', 'r+');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $wrapper);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$ips = get_curl_remote_ips($wrapper);
fclose($wrapper);
echo end($ips); // 208.69.36.231
function get_curl_remote_ips($fp)
{
rewind($fp);
$str = fread($fp, 8192);
$regex = '/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/';
if (preg_match_all($regex, $str, $matches)) {
return array_unique($matches[0]); // Array([0] => 74.125.45.100 [2] => 208.69.36.231)
} else {
return false;
}
}
AFAIK kann man nicht ‚Kraft‘ der Server Sie seine IP-Adresse in der Antwort zu senden. Warum nicht direkt nachsehen? (Check this question/answers for how to do that from php)
Ich glaube nicht, dass es eine Möglichkeit gibt, dass die IP-Adresse direkt von Locke zu bekommen.
Aber so etwas wie dies könnte den Trick:
Erstens hat die Locke Anfrage, und verwenden Sie curl_getinfo
die „echte“ URL zu erhalten, die abgerufen wurde - dies ist, weil die erste URL zu einem anderen umleiten kann, und Sie wollen die finalen:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
$real_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
var_dump($real_url); // http://www.google.fr/
verwenden Sie dann parse_url
den „host“ Teil von dieser letzten URL zu extrahieren:
$host = parse_url($real_url, PHP_URL_HOST);
var_dump($host); // www.google.fr
und schließlich verwenden gethostbyname
t o die IP-Adresse erhalten, die auf diesem Host entsprechen:
$ip = gethostbyname($host);
var_dump($ip); // 209.85.227.99
Nun ...
, dass eine Lösung ist ^^ Es ist in den meisten Fällen funktionieren sollte, nehme ich an - obwohl ich nicht sicher bin, würden Sie immer erhalten die „richtige“ führen, wenn es irgendeine Art von Load-Balancing mecanism ist ...
echo '<pre>';
print_r(gethostbynamel($host));
echo '</pre>';
das gibt Ihnen die alle IP-Adressen mit dem angegebenen Hostnamen zugeordnet ist.
ich verwenden, um diesen ein
<?
$hosts = gethostbynamel($hostname);
if (is_array($hosts)) {
echo "Host ".$hostname." resolves to:<br><br>";
foreach ($hosts as $ip) {
echo "IP: ".$ip."<br>";
}
} else {
echo "Host ".$hostname." is not tied to any IP.";
}
?>
von hier: http://php.net/manual/en/function.gethostbynamel.php
Ich denke, Sie sollten mit der IP-Adresse zu erhalten, von dem Server in der Lage sein:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://stackoverflow.com");
curl_exec($ch);
$ip = curl_getinfo($ch,CURLINFO_PRIMARY_IP);
curl_close($ch);
echo $ip; // 151.101.129.69
- 1. Externes SVG-Objekt mit PHP cURL abrufen
- 2. Wie PHP cURL wie als cURL-Befehlszeile
- 3. Curl in PHP vs Curl Befehlszeile
- 4. php cUrl zur Befehlszeile curl Anruf
- 5. Übersetzen in PHP Curl Curl Befehlszeile
- 6. Bild Upload CURL Befehl zu PHP Curl
- 7. Convert Terminal cURL nach PHP cURL Skript
- 8. curl --resolve Entsprechung in PHP CURL Bibliothek
- 9. SSL-Befehlszeile curl in PHP curl übersetzen
- 10. php cURL leise Option?
- 11. PHP cURL Authentifizierung Problem
- 12. PHP Curl lädt nicht
- 13. PHP Curl Post?
- 14. CURL PHP Bild senden
- 15. Erhöhen CURL Geschwindigkeit php
- 16. PHP CURL & HTTPS
- 17. PHP cURL, POST JSON
- 18. PHP - Debugging Curl
- 19. PHP CURL Datei herunterladen
- 20. PHP JSON Curl Problem
- 21. cURL zu PHP entspricht
- 22. Convert curl nach PHP
- 23. PHP-Code auf Curl
- 24. PHP Curl CURLOPT_IPRESOLVE
- 25. PHP cURL spezifischen HTML
- 26. PHP, wie CURL verwenden
- 27. Abrufen von Antworttext von curl in cpp
- 28. php Escape-Methode, php curl Bild hochladen
- 29. PHP: curl und stream Weiterleitung
- 30. PHP CURL zu CodeIgniter-Controller
Der Server besteht aus mehreren ausgeführten Instanzen. Daher muss ich genau herausfinden, mit welchem Server ich mich verbunden habe, und für eine bestimmte CURL-Anfrage geantwortet. – Beier