如何使用 php curl 设置特定 ip 的主机名

问题描述 投票:0回答:4

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

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

有办法吗?

更详细一点: 我想使用内部 LAN、使用其内部 IP 在我的服务器之间发出curl 请求。问题是我在该服务器上托管了多个站点。因此,当我向服务器的内部IP发出curl请求时..类似于(curl_init(xxx.xxx.xxx.xxx)),我希望能够告诉apache转到由a指向的特定文件夹虚拟主机。我希望这能让问题更清楚一些.. – Vishesh Joshi 3 分钟前编辑

php curl
4个回答
62
投票

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

33
投票

对于 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...

14
投票

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

0
投票

如果使用

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);
© www.soinside.com 2019 - 2024. All rights reserved.