当前位置: 首页 > 知识库问答 >
问题:

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

红存
2023-03-14

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

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

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

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

共有2个答案

廉雅惠
2023-03-14

根据更新日志,在5.5.0中添加了对CURLOPT_RESOLVE的支持。
请注意,在撰写本文时,它甚至还没有记录下来,但根据此错误报告,它将数组作为参数

魏刚豪
2023-03-14

虽然@deceze的答案是正确的,但一个活生生的例子可能会有所帮助。我需要CURLOPT_RESOLVE,因为我尝试使用其他主机直接连接到IP地址:www.example.com 标头,但由于服务器使用的是SNI,因此这不起作用。

我使用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);
 类似资料:
  • 问题内容: 我知道我们可以使用PHP DOM 来使用PHP解析HTML。我也在堆栈溢出中发现了很多问题。但是我有一个特定的要求。我有如下的HTML内容 我想解析以上HTML并将内容保存到两个不同的数组中,例如: 和 我可以简单地使用jQuery来实现。但是我不确定这是否正确。如果有人能指出我正确的方向,那就太好了。提前致谢。 问题答案: 尝试查看PHP简单HTML DOM解析器 它具有类似于jQu

  • 问题内容: 我从其他地方的日志中附带了http响应标头。在我的日志文件中,我有类似以下内容: 给定上面的字符串,我如何将其解析为net / http中所述的Header对象。一种方法是自己分割字符串并映射键,值…但是我希望避免手动操作,而使用标准的(或维护良好的第3方)库来解析它…任何指针? 问题答案: 内置的解析器位于textproto中。您可以直接使用它,也可以添加伪造的HTTP请求标头并在h

  • 我正在尝试连接到SOAPendpoint。 使用上面的方法,我不断得到下面的错误 java.lang.Thread.run(未知来源)[na: 1.8。0_191]原因:com.sun.xml.messaging.saaj.SOAPExceptionImpl:消息发送失败com.sun.xml.messaging.saaj.client.p2p。HttpSOAPConnection.post(Ht

  • 我想在使用Html Unit时覆盖DNS解析,以便我可以测试负载均衡器后面的显式服务器。这应该在不更改etc/hosts文件的情况下完成。 这个问题得到了一个答案,如何用普通的java解决这个任务:如何在Java的HTTP连接中覆盖DNS 但我需要一个Html单元的解决方案。 Html单元使用apache httpclient。可以改变httpclient的连接管理器吗?(参见上面的其他问题)

  • 假设解析树中存在连接两个名词的动词,那么找出它的好策略是什么?例如,在这个句子中: 这名男子在回家前给妻子打了电话。 考虑到“男人”和“妻子”的输入,我想得到动词“called”。OpenNLP给了我一个解析树: (前)(前)(后)(后)(前)(后)(后)(后)(后)(后)(前)(前)(后)(后)(后)(前)(后)(后)(后)(后)(后)(前)(后)(后)(前)(后)(后)(后)(前)(后)(后)

  • 我有一个Kafka接收器任务,通过方法收听Kafka主题 但我不想自动提交偏移量,因为一旦从Kafka取出记录,我就有一些处理逻辑 从Kafka获取记录后,如果处理成功,则只有我想提交偏移量,否则它应该再次从同一偏移量读取。 我可以在Kafka consumer中看到方法,但在中找不到替代方法。