2012-04-08 91 views
2

我想使用pear http_request2($ url)類發出https請求。 我能夠提出http請求,但不能https。並且該網站便利了http和https。服務器無法響應https。如何使https使用php Http_Request2()

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

我 – neckTwi 2012-04-09 02:29:13

+0

看來SSL證書幫助plzz,其非常重要的是沒有安裝/正確配置,連接時我收到以下錯誤:ssl_error_rx_malformed_certificate(SSL3_GET_SERVER_CERTIFICATE:無法找到公鑰參數) – stewe 2012-04-09 03:24:39

+0

ü試圖連接的https:/ /collegedb2.ferryfair.com ??它只在我們的本地網絡上可用。服務器上的SSL證書已正確安裝。問題在於http_request2類,它無法發出https請求。 openssl在php中啓用,在phpinfo() – neckTwi 2012-04-09 05:48:17

回答

0

HTTP_Request2絕對能夠讓HTTPS請求。可能有更深的錯誤,例如導致問題的自定義SSL證書。

安裝Wireshark並檢查您實際獲得哪個錯誤。發佈回來。

+0

thanq cweiske中檢查,有一段時間我跳過解決這個問題。目標Web應用程序正在使用自簽名SSL證書。我想我應該在我的web應用程序中安裝證書。我不知道如何。我對它進行了大量搜索,最終放棄了。我需要幫助。 – neckTwi 2012-05-04 07:49:54

+0

您可以禁用證書驗證 - 請參閱http://pear.php.net/manual/en/package.http.http-request2.config.php中的選項 - 或者安裝授權(CA)的公共證書籤署了自簽名證書。 – cweiske 2012-05-04 07:56:58

+0

thanq。如何使用ssl_local_cert或ssl_capath參數使用目標Web應用程序的SSL證書。我沒有完全理解ssl_local_cert參數,應該給它的目標Web應用程序的SSL證書的文件名? – neckTwi 2012-05-04 08:20:07

9

禁用證書驗證的註釋是我的關鍵。

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

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

我得到了目標服務器證書。我想驗證證書。如果你成功驗證目標,請發佈。 – neckTwi 2012-05-29 05:32:16

+1

但是永遠記得你只是壓制邪惡的根源 – Jeredepp 2013-08-05 09:48:06

3

我遇到過這個問題。 (對我來說)的修復是使用「捲曲」的適配器,例如:在哪裏

$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部分它說

Peer verification is likely to fail if you don't explicitly provide ssl_cafile and/or ssl_capath, especially with Socket adapter.

大概捲曲知道找到一個本地CA文件來信任。

(帶捲曲的PHP 5.4.38)。

+0

啊,感謝這個。現在我可以不用擔心用CURL重寫所有的請求。 ;-) – Leo 2015-03-09 13:44:19