【问题标题】:http_post_fields() couldn't resolve host namehttp_post_fields() 无法解析主机名
【发布时间】:2012-12-13 16:39:08
【问题描述】:

我的 PHP 脚本使用 http_post_fields() 向另一台服务器发出 post 请求。 下面是代码示例:

$g = http_post_fields("http://mysite.com", $some_array);

虽然脚本偶尔会起作用,但我经常会收到此错误:

 http_post_fields() [function.http-post-fields]: couldn't resolve host name; name lookup timed out 

我现在在函数中尝试了各种http地址,都导致这个错误。 有谁知道我的问题的根源是什么?

【问题讨论】:

  • 听起来是您的 Web 服务器的 DNS 相关问题。你在什么样的服务器环境下?
  • 间歇性 DNS 故障可能是路由器过载丢弃 UDP 数据包,也可能是响应太大,导致使用 TCP 连接,而该连接在某处的防火墙处被阻止。

标签: php http curl pecl


【解决方案1】:

如果您有 ssh 访问权限,请在 shell ping mysite.com 上尝试此命令,看看是否有任何响应

可以有防火墙/代理服务器配置来阻止从服务器发送 POST 请求

试试这个并检查域解析到 IP。

<?php
$ip = gethostbyname('www.example.com');

echo $ip;
?>

HTTPRequest 示例,它将回显状态代码

<?php
$r = new HttpRequest('http://www.example.com/', HttpRequest::METH_POST);
$r->addPostFields(array('param1' => 'value'));

try {
   $http_req->send();
} catch (HttpException $ex) {

}

$response_code = $http_req->getResponseCode();
 echo $response_code;
?>

【讨论】:

  • 好的。 SSH 进入服务器 ping 远程服务器。 0% 损失。他们可以交流。我将您的函数复制到我的脚本中,并调用它作为参数传入目标服务器和端口 - 完全成功。
  • * edit- 通信成功,虽然我原来脚本中的函数调用仍然失败。
  • 我刚刚尝试了new httpRequest..它返回了这个错误HttpInvalidParamException' with message Empty or too short HTTP message:'' in /var/www/vhosts/mySite.ca/httpdocs/portal1/application/views/applications/grid/auth_sample.php:0 inner exception 'HttpRequestException' with message 'couldn't resolve host name; name lookup timed out (http://mysite.com/)
【解决方案2】:

感谢 Kasun 的所有输入。最后,我厌倦了这个 PECL 库(其中定义了 http_post_fields),我改用 cURL。我在这里达到的目标是请求从一台服务器到另一台服务器的安全票。当然,现在我使用的是 cURL,整个模块运行顺畅。再次感谢。

【讨论】:

    猜你喜欢
    • 2017-03-26
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多