PHP中四种URL访问方法详解:file_get_contents、fopen、POST与fsockopen

1 下载量 138 浏览量 更新于2024-09-01 收藏 51KB PDF 举报
在PHP编程中,访问和处理URL地址是常见的任务,特别是在网络爬虫(如小偷采集)和数据抓取的应用中。本文将介绍PHP中常用的四种方法来打开和获取URL内容:`file_get_contents()`、`fopen()`配合`stream_get_meta_data()`、`file_get_contents()`以POST方式请求,以及使用`fsockopen()`函数获取完整的HTTP响应。 1. `file_get_contents()`函数 - 这是最简洁的方式,适用于GET请求。它能够直接读取并返回指定URL的内容。示例代码展示了如何设置URL,然后通过该函数获取HTML内容: ```php $url = 'http://www.baidu.com/'; $html = file_get_contents($url); echo $html; ``` 此函数的优点是易于使用,但缺点是如果服务器禁止了`file_get_contents`或超时设置过短,可能无法获取全部内容。 2. `fopen()` + `stream_get_meta_data()` - 这个组合允许更精细的控制,可以逐行读取URL内容,并获取元数据。`fopen()`用于打开连接,`stream_get_meta_data()`则提供关于连接的信息: ```php $fp = fopen($url, 'r'); printarr(stream_get_meta_data($fp)); while (!feof($fp)) { $result .= fgets($fp, 1024); } fclose($fp); echo "urlbody: $result"; ``` 这种方式适合处理大文件或分页加载的内容,因为它允许按需读取。 3. `file_get_contents()` with POST - 当需要发送POST数据时,可以使用`http_build_query()`构建数据,然后设置特定的HTTP选项,如方法和头部信息。例如: ```php $data = array('foo' => 'bar'); $data = http_build_query($data); $options = [ 'http' => [ 'method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\n". "Content-Length: " . strlen($data) . "", 'content' => $data, ], ]; $context = stream_context_create($options); $html = file_get_contents('http://localhost/e/admin/test.html', false, $context); echo $html; ``` 这适用于需要提交表单数据的情况。 4. `fsockopen()`函数 - 这是一种底层的TCP连接方式,可以获取完整的HTTP响应,包括头部和主体。这种方法对性能和灵活性有较高要求: ```php function get_url($url, $cookie = false) { // ... (其他处理,如设置cookie) $request = "GET $url HTTP/1.1\r\n"; // ... (添加cookie等额外头信息) $request .= "\r\n"; $socket = fsockopen('tcp://' . parse_url($url, PHP_URL_HOST), parse_url($url, PHP_URL_PORT), $errno, $errstr, 30); if (!$socket) { die("Could not connect to $url ($errno $errstr)"); } fwrite($socket, $request); // ... (接收并解析服务器响应) // ... fclose($socket); } get_url('http://www.example.com'); ``` `fsockopen()`尤其适合需要处理复杂HTTP请求,或者需要处理HTTP状态码和头信息的场景。 选择哪种方法取决于具体需求,如安全性、性能、数据类型(GET还是POST)、是否需要完整的HTTP响应等。理解并灵活运用这些方法有助于在PHP项目中有效地与URL交互。