如何使用 php curl 为特定 IP 设置主机名


How to set hostname using php curl for a specific ip

嗨,我有一个服务器上设置了几个虚拟主机。

我想使用 php 向该服务器的 ip 发出 curl 请求。我还想向服务器 ip 上的特定主机名发出此请求。

有没有办法做到这一点?

更详细一点:我想使用内部 LAN 在服务器之间发出卷曲请求,使用其内部 IP。问题是我在此服务器上托管了多个站点。因此,当我向服务器的内部IP发出curl请求时。像(curl_init(xxx.xxx.xxx.xxx((这样的东西,我希望能够告诉apache转到虚拟主机指向的特定文件夹。我希望这使问题更加清晰。– 维什什乔希 3分钟前编辑

您可以在 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);

对于HTTPS站点,请使用自PHP 5.5以来每个PHP版本中都存在的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);

示例输出:

* 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...

基于利·辛普森,它可以工作,但我需要附加查询字符串。这就是我的工作解决方法:

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