簡體   English   中英

CURL錯誤:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知協議

[英]CURL error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

我正在嘗試通過CURL使用代理和SSL證書,但出現錯誤。

這是CURL代碼:

//Website
$url = 'https://www.stubhub.com';

//Curl
$curl=curl_init();

//SSL
curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, true );
curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt( $curl, CURLOPT_CAINFO, 'C:\xampp\cacert.pem' );

curl_setopt( $curl, CURLOPT_URL,trim( $url ) );
curl_setopt($curl, CURLOPT_REFERER, $url);
curl_setopt( $curl, CURLOPT_AUTOREFERER, true );
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $curl, CURLOPT_FAILONERROR, true );
curl_setopt( $curl, CURLOPT_HEADER, false );
curl_setopt( $curl, CURLINFO_HEADER_OUT, false );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_BINARYTRANSFER, true );
curl_setopt( $curl, CURLOPT_CONNECTTIMEOUT, 0 );
curl_setopt( $curl, CURLOPT_TIMEOUT, 0 );
curl_setopt( $curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' );

//Proxy
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($curl, CURLOPT_PROXY, '177.190.147.241:41545');
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt ($curl, CURLOPT_PORT , 80);

curl_setopt($curl, CURLOPT_COOKIEFILE,__DIR__."/cookie.txt");
curl_setopt( $curl, CURLOPT_MAXREDIRS, 10 );
curl_setopt( $curl, CURLOPT_ENCODING, '' );

curl_setopt( $curl, CURLOPT_VERBOSE, true );
curl_setopt( $curl, CURLOPT_NOPROGRESS, true );
curl_setopt( $curl, CURLOPT_STDERR, $vbh );

我得到以下回應:

* Rebuilt URL to: https://www.stubhub.com/
*   Trying 177.190.147.241...
* TCP_NODELAY set
* Connected to 177.190.147.241 (177.190.147.241) port 41545 (#0)
* Establish HTTP proxy tunnel to www.stubhub.com:80
> CONNECT www.stubhub.com:80 HTTP/1.1
Host: www.stubhub.com:80
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1
Proxy-Connection: Keep-Alive

< HTTP/1.1 200 OK
< 
* Proxy replied OK to CONNECT request
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: C:\xampp\cacert.pem
  CApath: none
* error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
* Curl_http_done: called premature == 1
* Closing connection 0
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

如何解決這個問題?

* Rebuilt URL to: https://www.stubhub.com/

您正在嘗試訪問URL https://www.stubhub.com/這意味着端口443(協議默認為https)上的給定主機具有協議https(即TLS上的HTTP)。

但是,出於未知原因,您明確指定應使用端口80而不是端口443:

curl_setopt ($curl, CURLOPT_PORT , 80);

這意味着它將不在端口443上連接到主機,而在端口80上:

* Establish HTTP proxy tunnel to www.stubhub.com:80
> CONNECT www.stubhub.com:80 HTTP/1.1

端口80用於純HTTP。 不過,客戶端將嘗試使用https(基於TLS的HTTP),因為這就是URL所說的。 因此,客戶端將嘗試通過發送ClientHello來發起TLS握手。 由於服務器期望一個普通的HTTP請求,但是獲得一個TLS ClientHello,因此它將以HTTP錯誤響應進行回復。 然后,客戶端將嘗試將此響應解析為預期的TLS響應並失敗:

error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

如何解決這個問題?

不要將CURLOPT_PORT設置為80。只是不要將CURLOPT_PORT設置為從URL中獲取。 文檔中

此選項將number設置為要連接的遠程端口號, 而不是URL或所用協議的默認端口中指定的端口號。 通常,您只需讓URL決定使用哪個端口,但這可以使應用程序覆蓋它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM