2012-03-29 14 views
30

Witam Mam serwer, na którym skonfigurowano kilka hostów wirtualnych.Jak ustawić nazwę hosta za pomocą php curl dla konkretnego adresu IP

Chciałem zrobić curl wniosek do ip tego serwera za pomocą php. Również chciałem zrobić to żądanie do określonej nazwy hosta na ip serwera.

Czy jest jakiś sposób na zrobienie tego?

Trochę więcej szczegółów: Chcę wykonywać polecenia curl pomiędzy moimi serwerami za pomocą wewnętrznej sieci LAN, używając ich wewnętrznego adresu IP. Problem polega na tym, że mam kilka witryn hostowanych na tym serwerze. Więc kiedy robię curl żądanie do wewnętrznego adresu IP serwera .. coś jak (curl_init (xxx.xxx.xxx.xxx)), chcę być w stanie powiedzieć Apache, aby przejść do konkretnego folderu wskazywanego przez wirtualny host. Mam nadzieję, że się to pytanie nieco bardziej wyraźne .. - Vishesh Joshi 3 minuty temu edytować

+0

Chcesz pokazać swoje ip inny z dyni? – safarov

+0

Jeśli jest to nazwa hosta hostowana przez serwer sieciowy, możesz po prostu użyć "the_hostname.domain" i powinna działać, chyba że jest to lokalna nazwa hosta i jesteś spoza sieci, wtedy musisz uczynić domenie domyślną domeną. ip, więc możesz użyć ip zamiast tego. Ale nie bardzo jasne, czy to jest to, co szukasz – Prix

+0

Chcę, aby curl wnioski między moimi serwerami za pomocą wewnętrznej sieci LAN, przy użyciu ich wewnętrznego IP. Problem polega na tym, że mam kilka witryn hostowanych na tym serwerze. Tak więc, gdy wykonuję żądanie zwijania do wewnętrznego adresu IP serwera .. coś jak (curl_init (xxx.xxx.xxx.xxx)), chcę być w stanie powiedzieć Apache, aby przejść do określonego folderu wskazanego przez wirtualnego hosta. Mam nadzieję, że pytanie to stało się bardziej jasne. –

Odpowiedz

42

Można ustawić nagłówek hosta w żądaniu curl:

<?php 
$ch = curl_init('XXX.XXX.XXX.XXX'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: subdomain.hostname.com')); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
echo curl_exec($ch); 
+0

Dzięki Leigh. Po prostu to zrobiłem i zadziałało. Po prostu chciałem zamieścić tę samą odpowiedź :) dzięki. –

12

Base Leigh Simpson, działa ale potrzebuję ciąg kwerendy dołącz do niego. Właśnie to obejść:

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://xxx.xxx.xxx.xxx/index.php?page=api&action=getdifficulty"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: subdomain.hostname.com')); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
echo curl_exec($ch); 
?> 
+1

potrzebujesz ścieżki w adresie URL: tylko adres IP hosta nie jest wystarczający. Dlatego powinieneś ustawić curl_setopt ($ ch, CURLOPT_URL, "http://xxx.xxx.xxx.xxx/"); – cernio

13

HTTPS stron użyć CURLOPT_RESOLVE która istnieje w każdej wersji PHP since PHP 5.5.

<?php 
$ch = curl_init('https://www.example.com/'); 
// note: array used here 
curl_setopt($ch, CURLOPT_RESOLVE, array("www.example.com:443:172.16.1.1")); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 
$result = curl_exec($ch); 

Przykładowe wyjście:

* Added www.example.com:443:172.16.1.1 to DNS cache 
* Hostname www.example.com was found in DNS cache 
* Trying 172.16.1.1... 
+0

Należy zauważyć, że chociaż ta funkcja jest zaimplementowana w PHP 5.5, nadal nie jest ona udokumentowana w dokumentacji PHP. Jednak jest to poprawne i jedyne rozwiązanie, aby certyfikaty ssl zadziałały. Na razie dodatkową dokumentację można przeczytać w podręczniku CURL: http://curl.haxx.se/libcurl/c/CURLOPT_RESOLVE.html – Riimu

+0

Jesteś świetny! Wielkie dzięki! https://stackoverflow.com/questions/47940730/why-curls-fails-to-verify-google-access-token-whereas-browser-succeeds/48167715#48167715 – centurian

Powiązane problemy