在 PHP 中,通過使用 fsockopen 可以實現 TCP/IP 協議的連接,連接到 HTTP、HTTPS 等協議。其中,如果我們要連接到 HTTPS 協議的話,就需要使用端口號 443。
通過 fsockopen() 函數連接到 HTTPS 協議,需要使用 SSL 安全套接字層,也就是 PHP 的 OpenSSL 擴展。下面我們來看一段連接到某個 HTTPS 站點的示例代碼:
<?php $url = "https://example.com"; $port = 443; $ssl = stream_context_create(array('ssl' =>array('verify_peer' =>false, 'verify_peer_name' =>false))); $fp = stream_socket_client("ssl://".$url.":".$port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $ssl); if(!$fp){ echo "連接失敗:$errstr($errno)"; }else{ fwrite($fp, "GET / HTTP/1.1\r\n"); fwrite($fp, "Host: $url\r\n"); fwrite($fp, "Connection: close\r\n\r\n"); $response = ''; while(!feof($fp)){ $response .= fgets($fp, 1024); } fclose($fp); echo $response; }
在上面的代碼中,我們首先通過 stream_context_create 創建一個安全套接字流上下文,通過數組里的 ssl 參數來設置。其中,verify_peer 參數表示是否驗證服務器端證書;verify_peer_name 表示是否驗證服務器端證書中的 CN 字段。
接著我們使用 stream_socket_client() 函數來創建一個 SSL 安全套接字流客戶端,通過協議和地址及端口號來達到連接指定站點的目的。function 簽名如下:
resource stream_socket_client ( string $remote_socket, int &$errno = null, string &$errstr = null, float $timeout = ini_get("default_socket_timeout"), int $flags = STREAM_CLIENT_CONNECT, resource $context = null )
代碼中的第一個參數 "ssl://".$url.":".$port 表示創建一個 SSL 安全套接字流,使用 HTTPS 協議連接指定地址和端口。接著我們可以在 if 判斷中判斷是否連接成功,如果成功了就可以通過 $fp 對象來進行數據傳輸。
最后我們可以通過截取 $response 中的 HTML 內容來進行解析或者查看。當然,這只是一個簡單的連接示例。在實際應用中,我們還需要更多的操作和處理。例如請求頭部信息的封裝,SSL 驗證的實現等等。
總結來說,使用 fsockopen 進行 TCP/IP 連接,是 PHP 開發中必須掌握的基本技能之一。特別是在連接 HTTPS 協議的站點時,需要使用 SSL 安全套接字層來進行處理。無論是身處前端開發還是后端開發,都可以通過學習和使用 fsockopen,提升自己的開發能力。