我想使用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)
答案 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并检查您实际获得的错误。张贴回来。