如何使用PHP Http_Request2()发出https请求

时间:2012-04-08 16:27:19

标签: php https pear http-request

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

3 个答案:

答案 0 :(得分: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
));

答案 1 :(得分:4)

我遇到了这个问题。修复(对我来说)是使用' curl'作为适配器,例如:

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

另请参阅" SSL参数" http://pear.php.net/manual/en/package.http.http-request2.config.php部分说

  

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

据推测,curl知道在哪里可以找到要信任的本地CA文件。

(PHP 5.4.38 with curl)。

答案 2 :(得分:0)

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

安装Wireshark并检查您实际获得的错误。张贴回来。