它通过改变在我这边起作用tls://
to ssl://
这对我来说绝对没有意义,但这也是为什么使用fsockopen
是一个太低级别的库,无法与其进行 HTTP 交换(您应该使用适当的 HTTP 客户端库),同时对于 TLS 内容配置不够。
With
$fp = fsockopen('tls://tlstest.paypal.com', 443, $errno, $errstr, 30);
I get :
HTTP/1.1 426 Unknown
Server: AkamaiGHost
Mime-Version: 1.0
Content-Type: text/html
Content-Length: 267
Expires: Fri, 22 Jun 2018 19:49:46 GMT
Date: Fri, 22 Jun 2018 19:49:46 GMT
Connection: keep-alive
Upgrade: TLS/1.2
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
You don't have permission to access "http://tlstest.paypal.com/" on this server.<P>
Reference #18.8024a17.1529696986.1fc51318
</BODY>
</HTML>
但与$fp = fsockopen('ssl://tlstest.paypal.com', 443, $errno, $errstr, 30);
I get:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 20
Date: Fri, 22 Jun 2018 20:05:35 GMT
Connection: keep-alive
然后它就挂了,可能是因为它是一个keep-alive连接并且缓冲区小于1024,所以你得不到下面的body内容。
这可能是“PayPal_Connection_OK”,因为它与中显示的长度完全匹配Content-Length
。
这再次表明您应该使用 HTTP 客户端库,而不是尝试(糟糕地)重新实现 HTTPfsockopen
.