【问题标题】:how to make https request using php Http_Request2()如何使用 php Http_Request2() 发出 https 请求
【发布时间】:2012-04-21 07:17:34
【问题描述】:

我想使用 pear http_request2($url) 类发出 https 请求。 我可以发出http请求,但不能发出https。并且该网站促进了http和https。服务器响应 https 没有问题。

    require 'HTTP/Request2.php';
    $url = 'https://collegedb2.ferryfair.com';
    $r = new Http_Request2($url);
    $r->setMethod(HTTP_Request2::METHOD_POST);
    try {
        $response = $r->send();
    } catch (Exception $exc) {
        $es = $exc->getTraceAsString();
        $ets=$exc->__toString();
        $egc=$exc->getCode();
        $egl=$exc->getLine();
        $egm=$exc->getMessage();
        $egt=$exc->getTrace();
        $response = null;
    }
    $page = $response->getBody();
    echo $page;

这是错误信息:

$egm=(string) Unable to connect to ssl://collegedb2.ferryfair.com:443. Error: stream_socket_client(): unable to connect to ssl://collegedb2.ferryfair.com:443 (Unknown error)

【问题讨论】:

  • 似乎 ssl 证书未正确安装/配置,连接时出现以下错误:ssl_error_rx_malformed_certificate (SSL3_GET_SERVER_CERTIFICATE:unable to find public key parameters)
  • 你尝试连接collegedb2.ferryfair.com ??它仅在我们的本地网络上可用。服务器上的 ssl 证书已正确安装。问题在于 http_request2 类,它无法发出 https 请求。 openssl 在 php 中启用,在 phpinfo() 中检查

标签: php https pear http-request


【解决方案1】:

HTTP_Request2 绝对能够发出 HTTPS 请求。可能有更深层次的错误,例如一个会带来问题的自定义 SSL 证书。

安装Wireshark 并检查您实际遇到的错误。把它发回去。

【讨论】:

  • thanq cweiske,有一段时间我已经跳过解决这个问题了。目标 Web 应用程序正在使用自签名 ssl 证书。我想我应该在我的网络应用程序中安装证书。我不知道怎么做。我google了很多关于它,最后放弃了。我需要帮助。
  • 您可以禁用证书验证 - 请参阅 pear.php.net/manual/en/package.http.http-request2.config.php 中的选项 - 或安装签署自签名证书的授权 (CA) 的公共证书。
  • 谢谢。如何使用带有 ssl_local_cert 或 ssl_capath 参数的目标 Web 应用程序的 ssl 证书。我没有完全理解 ssl_local_cert 参数,是否应该给出目标 Web 应用程序的 ssl 证书的文件名?
  • require 'HTTP/Request2.php'; $url = 'https://collegedb2.ferryfair.com/lib/crap.html'; $r = new Http_Request2($url); $r-> setConfig(array("ssl_verify_peer"=>TRUE,"ssl_local_cert"=>"$root/ssl/collegedb2.ferryfair.com.cert")); 我正在从同一台服务器发出这个请求..
  • 我得到了目标服务器证书。我想验证证书。如果您成功验证目标,请发布。
【解决方案2】:

禁用证书验证的评论对我来说是关键。

$request = new HTTP_Request2('https://someserver.com/somepath/something',
    HTTP_Request2::METHOD_POST);

$request->setConfig(array(
    'ssl_verify_peer'   => FALSE,
    'ssl_verify_host'   => FALSE
));

【讨论】:

  • 我得到了目标服务器证书。我想验证证书。如果您成功验证目标,请发布。
  • 但永远记住你只是在压制邪恶的根源
【解决方案3】:

我遇到了这个问题。修复(对我而言)是使用“curl”作为适配器,例如:

$request = new Http_Request2('https://whatever');
$request->setAdapter('curl');
$response = $request->send();

另请参阅http://pear.php.net/manual/en/package.http.http-request2.config.php 上的“SSL 参数”部分,其中显示

如果您没有明确提供 ssl_cafile 和/或 ssl_capath,对等验证可能会失败,尤其是使用 Socket 适配器。

大概 curl 知道在哪里可以找到要信任的本地 CA 文件。

(带有 curl 的 PHP 5.4.38)。

【讨论】:

  • 啊,谢谢这个。现在我可以不用再担心用 CURL 重写我的所有请求了。 ;-)
猜你喜欢
  • 2012-12-14
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 2011-08-17
  • 2011-08-17
  • 1970-01-01
  • 2013-06-07
相关资源
最近更新 更多