如何在 PHP 中手动解析 HTTP(S) 连接中的主机

2024-01-12

Curl 具有手动指定将主机解析到哪个 IP 的功能。例如:

curl https://www.google.com --resolve "www.google.com:443:173.194.72.112"

这在使用 HTTPS 时特别有用。如果只是一个 HTTP 请求,我可以通过直接指定 IP 地址并添加主机标头来实现相同的效果。但在 HTTPS 中,这会中断连接,因为 SSL 证书主机将与 IP 地址进行比较,而不是与主机标头进行比较。

我的问题是,如何在 PHP 中做同样的事情?


尽管 @deceze 的答案是正确的,但一个活生生的例子可能会有用。我需要CURLOPT_RESOLVE因为我试图使用附加的 IP 地址直接连接Host: www.example.comheader,但由于服务器使用 SNI,所以这不起作用。

I used CURLOPT_RESOLVE解决我的问题。此代码允许我通过我选择的 IP 地址连接到 SNI 服务器:

$resolve = array(sprintf(
    "%s:%d:%s", 
    $hostname,
    $port,
    $host_ip
));

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_RESOLVE, $resolve);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch); 
curl_close($ch);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PHP 中手动解析 HTTP(S) 连接中的主机 的相关文章

随机推荐

  • 为什么 iOS11 中 UIScreen.bounds 不正确

    请不要标记为重复 可用线程尚未提供答案 行为仅限 iOS11 将项目从 Xcode 8 更新到 Xcode 9 现在使用 iOS11 但仍然使用 Swift 3 我有以下经验 print UIScreen main bounds width
  • 在 PHP 5.4 中工作的 PHP 5.3 中出现错误 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 这是在 P
  • 如何处理绑定到自定义程序集对象数据源的 RDLC 报告中的空嵌套对象?

    我有一个 RDLC 报告 我将其直接以 PDF 形式呈现到响应流 而不是使用 ReportViewer 在呈现报表的代码中 它的 DataSource 绑定到自定义程序集中定义的 List Of ClassA 对象 这似乎在大多数情况下都有
  • 如何使用注释自动装配 RestTemplate

    当我尝试自动装配 Spring 时RestTemplate 我收到以下错误 nested exception is org springframework beans factory NoSuchBeanDefinitionExceptio
  • Facebook C# SDK ASP.Net 3.5 示例

    我被要求开发一个 Facebook 应用程序 允许当前系统的用户使用这个 Facebook 应用程序找到彼此 不幸的是 他们的要求是它必须在 ASP NET 3 5 中构建 更容易为客户分发 我是一名经验丰富的 PHP 开发人员 尽管我过去
  • Android SpeechRecognizer 音频录制错误

    我正在尝试在 Android 上使用 SpeechRecognizer 而不使用 Intent Dialog 它在大多数设备上工作正常 但某些设备返回音频录制错误 错误代码 3 并且没有此错误的详细信息 有什么解决办法或者原因吗 谢谢你 当
  • 伊伊。如何添加CSS“错误”类到表单提交的输入?

    我有 Yii 形式 有些字段是必需的 提交表单时 我需要将 CSS 类 错误 添加到文本输入中 我的代码
  • Firefox 不遵守 rel=stylesheet 链接的“disabled”属性

    我有一个网站需要加载两个主题 用户可以打开 关闭第二个主题 我目前正在通过使用来完成此任务disabled链接中的标签如下 然后我切换disabled在 JavaScript 中 这在 Safari Mac Chrome Mac Windo
  • 为什么 gprof 大大低估了程序的运行时间?

    我有这个程序需要 2 34 秒才能运行 而 gprof 说它只需要 1 18 秒 我在其他地方读过答案 表明如果程序受 I O 限制 gprof 可能会出错 但这个程序显然不是 对于我正在尝试分析的有用程序 也会发生这种情况 它并不特定于这
  • MySQL validate_password_policy 未知系统变量

    我正在使用 MySQL 5 7 25 我想通过在 MySQL 命令中执行以下操作来增加我的 MySQL 密码策略 SET GLOBAL validate password policy 2 但我总是收到错误 错误 1193 HY000 未知
  • Valums Ajax Uploader (Mutli) - 检测所有文件何时上传

    我正在使用 Valums Ajax Uploader 上传一批文件 我们最近将代码从单一上传类型更改为多重上传类型 这给我们的代码带来了问题 正如你所看到的 当onComplete事件触发后 我们重新加载页面以显示新上传的图像 但是 那on
  • Java正则表达式匹配方括号[重复]

    这个问题在这里已经有答案了 我正在尝试使用正则表达式 java ReplaceAll 执行以下操作 Input Test Test1 Test2 Test3 Output TestTest3 简而言之 我需要删除方括号内的所有内容 包括方括
  • 如何在 SQLAlchemy 中使用数学方程作为过滤器

    我正在使用 SQLAlchemy ORM 在应用程序中构建 MySQL 查询 并且完全能够向查询添加基本过滤器 如下所示 query meta Session query User filter User user id 1 这给了我基本上
  • 如何使用 Jersey 2.x 设置连接和读取超时?

    在球衣 1 中我们有一个函数设置连接超时 https jersey java net apidocs 1 1 5 jersey com sun jersey api client Client html setConnectTimeout
  • 切换选项卡时倒计时器停止

    因此 基本上 当我切换选项卡时 特定页面上的倒计时器会停止倒计时 并在您返回选项卡时恢复 无论如何 有没有办法减轻这种情况 以便它在后台计数或计入您在另一个选项卡上花费的时间 这基本上就是我对 js 的看法 document getElem
  • gganimate 中框架标题的自定义列

    我想在 gganimate 标题中使用自定义列 但无法在文档中的任何位置阅读如何操作 使用其页面中的代码的示例 library gapminder ggplot gapminder aes gdpPercap lifeExp size po
  • 如何在 Inno Setup 中制作停止和暂停/恢复/播放音乐按钮

    我想在所有页面的左下角创建两个彼此相邻的按钮 例如重新加载 第一个按钮显示Pause和Resume命令 如果我单击Pause 按钮将切换到Resume自动地 另一个按钮显示Stop命令 如果我单击Stop 下一个按钮将切换到从头开始播放自动
  • 使用 boto3 中的 IAM ARN 连接到 s3 存储桶

    我正在尝试使用 IAM 角色连接到 s3 存储桶 我的存储桶名称是 test bucket 我创建了一个名为 的角色 我的角色 s3并赋予其完整的 s3 访问权限 即 AmazonS3FullAccess 当我尝试使用代码访问存储桶的名称时
  • 使用 HTTPS 进行应用程序无线安装不起作用

    我知道一般情况下通过 HTTPS 安装是有效的 但不知何故它在我的环境中不起作用 据我了解 itms service 链接是 HTTP itms services action download manifest url http SERV
  • 如何在 PHP 中手动解析 HTTP(S) 连接中的主机

    Curl 具有手动指定将主机解析到哪个 IP 的功能 例如 curl https www google com resolve www google com 443 173 194 72 112 这在使用 HTTPS 时特别有用 如果只是一