4

我想使用 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)

4

3 回答 3

8

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

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

$request->setConfig(array(
    'ssl_verify_peer'   => FALSE,
    'ssl_verify_host'   => FALSE
));
于 2012-05-23T23:57:53.810 回答
5

我遇到了这个问题。修复(对我而言)是使用“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)。

于 2015-03-06T15:09:22.233 回答
0

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

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

于 2012-04-24T07:17:08.080 回答