# curl 'https://www.baidu.com/' -i -L -v  -x '103.235.46.39:443'    ###103.235.46.39是跑到 8.8.8.8 dns出来的ip  
* About to connect() to proxy 103.235.46.39 port 443 (#0)  
*   Trying 103.235.46.39... connected  
* Connected to 103.235.46.39 (103.235.46.39) port 443 (#0)  
<pre name="code" class="plain">* Establish HTTP proxy tunnel to www.baidu.com:443  
> CONNECT www.baidu.com:443 HTTP/1.1

会留意到有这么两行

* Establish HTTP proxy tunnel to www.baidu.com:443  
> CONNECT www.baidu.com:443 HTTP/1.1  

curl -x参数, man文档里面对这个参数的描述,,第一句就是 ‘Use the specified proxy’,大致原因是因为 -x 参数的原因, curl 把 103.235.46.39:443 当成 http proxy 来用,对于 https 的请求, curl 对proxy先发起一个connect请求,但nginx没有实现connect方法从而导致客户端直接报错。

一、命令解决方法, 目前只看到绕过过去的方法, 改下请求的方式

# 这个请求会报错, 会报证书出错  
curl 'https://127.0.0.1/' -H 'Host:test.test.com' -i -L -v  
# 加个 -k, 不验证证书, 请求成功  
curl 'https://127.0.0.1/' -H 'Host:test.test.com' -i -L -v -k

二、程序里的解决方法,是不认证SSH

$ch = curl_init();
$url = 'www.baidu.com'; //请求的URL
...
//不认证SSH       
if (stripos(strtolower($url), 'https://') !== false) { 
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}
最后修改日期:2020年3月30日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。