PHP使用fsockopen进行HTTP请求示例

需积分: 9 5 下载量 137 浏览量 更新于2024-09-15 收藏 1KB TXT 举报
"fsockopen是PHP中的一个函数,用于创建网络套接字连接,常用于进行HTTP、FTP等协议的通信。" 在PHP编程中,`fsockopen()` 是一个非常重要的函数,它允许开发者直接通过低级的socket接口与远程服务器进行通信,而无需依赖如cURL这样的高级库。这个函数提供了对TCP/IP和Unix域套接字(AF_INET和AF_UNIX)的支持,可以用于执行各种网络任务,例如发送HTTP请求、进行FTP传输等。 `fsockopen()` 的函数原型如下: ```php fsockopen(string $hostname, int $port, int &$errno, string &$errstr, float $timeout = ini_get("default_socket_timeout")) ``` - `$hostname`:指定要连接的远程服务器的主机名或IP地址。 - `$port`:远程服务器的端口号,例如HTTP服务通常是80,HTTPS是443。 - `$errno`:一个引用参数,如果连接失败,将存储错误号。 - `$errstr`:另一个引用参数,存储连接失败时的错误信息。 - `$timeout`:可选参数,设置连接超时时间,单位为秒。 下面的示例代码展示了如何使用`fsockopen()` 发送一个简单的HTTP GET请求: ```php <?php $fp = fsockopen("191.168.100.100", 80, $errno, $errstr, 10); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { fputs($fp, "GET / HTTP/1.0\r\nHost: 191.168.100.100\r\n\r\n"); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } ?> ``` 在这个例子中,程序尝试连接到IP地址为 `191.168.100.100` 的服务器,并在80端口上打开一个socket连接。如果连接成功,它将发送一个HTTP GET请求到服务器的根目录,然后接收并显示响应的数据。如果连接失败,`fsockopen()` 将返回 `false`,并且可以通过 `$errno` 和 `$errstr` 获取错误信息。 值得注意的是,`fsockopen()` 创建的socket默认是阻塞模式(blocking mode),这意味着在等待数据时,脚本会暂停执行,直到有数据可用或者超时。如果需要非阻塞模式,可以使用 `stream_set_blocking()` 函数来改变socket的行为。 使用`fsockopen()` 的优点包括灵活性高,可以处理自定义协议,以及在某些场景下可能比其他高级API更节省系统资源。然而,对于大多数常规的HTTP操作,如cURL库通常更方便、功能更强大,也更容易处理复杂的请求和响应。