嗨,我有一台服务器,上面设置了多个虚拟主机。
我想使用 php 向该服务器的 ip 发出curl 请求。 我还想向服务器 IP 上的特定主机名发出此请求。
有办法吗?
更详细一点: 我想使用内部 LAN、使用其内部 IP 在我的服务器之间发出curl 请求。问题是我在该服务器上托管了多个站点。因此,当我向服务器的内部IP发出curl请求时..类似于(curl_init(xxx.xxx.xxx.xxx)),我希望能够告诉apache转到由a指向的特定文件夹虚拟主机。我希望这能让问题更清楚一些.. – Vishesh Joshi 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 站点,请使用
CURLOPT_RESOLVE
,它存在于每个 PHP 版本自 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);
输出示例:
* 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...
基于 Leigh Simpson, 它有效,但我需要附加查询字符串。 这就是我的工作方式:
<?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);
?>
如果使用
https
协议,请确保禁用证书验证,将 CURLOPT_SSL_VERIFYPEER
和 CURLOPT_SSL_VERIFYHOST
设置为 false
$headers = ['Host: hostname.com', 'User-Agent: myUA'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://xxx.xxx.xxx.xxx/index.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);