2012-03-29 8 views
30

こんにちは私はいくつかの仮想ホストが設定されているサーバーを持っています。特定のIPに対してphp curlを使用してホスト名を設定する方法

私はPHPを使ってこのサーバのIPにカール要求をしたかったのです。 また、この要求をサーバーのIP上の特定のホスト名にしたいと考えました。

これを行う方法はありますか?

もう少し精緻化: 自分の内部IPを使用して、内部LANを使用して自分のサーバー間でカールリクエストを作成したいと考えています。問題は、このサーバーで複数のサイトがホストされていることです。だから私は、サーバーの内部IPにcurl要求をするとき(curl_init(xxx.xxx.xxx.xxx)のようなもの)、私はapacheが指定した特定のフォルダに移動するように指示したい仮想ホスト。リー・シンプソンの

<?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

? – safarov

+0

ウェブサーバーがホストしているホスト名であれば、 "the_hostname.domain"を簡単に使うことができます。それがローカルホスト名でネットワーク外の人でなければ動作します。そのドメインをデフォルトドメインにする必要がありますipので代わりにipを使用することができます。しかし、私はあなたが見ているものがそれほど明確ではない – Prix

+0

自分の内部IPを使って、内部LANを使って自分のサーバ間でカールリクエストをしたいと思っています。問題は、このサーバーで複数のサイトがホストされていることです。 私はサーバーの内部IPにcurl要求をします。(curl_init(xxx.xxx.xxx.xxx))のように、私は、特定のフォルダを指すようにapacheに指示することができるようにしたい仮想ホストによって。私はその質問をもう少し明確にすることを願っています.. –

答えて

42

を編集3分前ヴィシェシュ女子 - 私は質問がもう少し明確になる願っています。..私はそれと一緒にクエリ文字列を添付する必要があります。 私が回避何が:HTTPSサイトの

<?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); 
?> 
+0

ありがとうございました。 私はちょうどこれを行い、それは働いた。 私はちょうど同じ答えを投稿するつもりでした:) ありがとう。 –

12

ベース、 それは動作しますが、:あなたはカールリクエストにホストヘッダーを設定することができ

+1

URLにパスが必要です。ホストIPだけでは不十分です。したがって、curl_setopt($ ch、CURLOPT_URL、 "http://xxx.xxx.xxx.xxx/")を設定する必要があります。 – cernio

13

は、すべてのPHPバージョンsince PHP 5.5に存在するCURLOPT_RESOLVEを使用しています。

<?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); 

出力例:あなたはカールと異なるあなたのIPアドレスを表示したい

* 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

この機能はPHP 5.5で実装されていますが、PHPのマニュアルではまだ説明されていません。しかし、これはSSL証明書が機能するための正しい解決策です。今のところ、CURLのマニュアル(http://curl.haxx.se/libcurl/c/CURLOPT_RESOLVE.html – Riimu

+0

)で追加のドキュメントを読むことができます。あなたは素晴らしいです!どうもありがとう! https://stackoverflow.com/questions/47940730/why-curls-fails-to-verify-google-access-token-whereas-browser-succeeds/48167715#48167715 – centurian