在PHP中使用HTTP的HEAD命令最简单的方法是什么?

xxe27gdn  于 2023-11-16  发布在  PHP
关注(0)|答案(6)|浏览(138)

我想发送超文本传输协议的HEAD命令到PHP中的服务器以检索标题,但不检索内容或URL。如何有效地执行此操作?
可能最常见的用例是检查死链接。为此,我只需要HTTP请求的回复代码,而不是页面内容。在PHP中获取网页可以使用file_get_contents("http://...")轻松完成,但为了检查链接,这真的很低效,因为它会下载整个页面内容/图像/任何内容。

ajsxfq5m

ajsxfq5m1#

您可以使用cURL轻松完成此操作:

<?php
// create a new cURL resource with the url
$ch = curl_init( "http://www.example.com/" );     

// This changes the request method to HEAD
curl_setopt($ch, CURLOPT_NOBODY, true);

// Execute curl with the configured options
curl_exec($ch);

// Edit: Fetch the HTTP-code (cred: @GZipp)
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

// To print the response code:
print( $code);

// To check the size/length:
$length = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); 

// To print the content_length:
print( "<br>\n $length bytes");

// close cURL resource, and free up system resources
curl_close($ch);

字符串

rggaifut

rggaifut2#

作为curl的替代方案,你可以使用http上下文选项将请求方法设置为HEAD,然后使用这些选项打开一个(http Package 器)流并获取Meta数据。

$context  = stream_context_create(array('http' =>array('method'=>'HEAD')));
$fd = fopen('http://php.net', 'rb', false, $context);
var_dump(stream_get_meta_data($fd));
fclose($fd);

字符串
另见:
http://docs.php.net/stream_get_meta_data
http://docs.php.net/context.http

svujldwt

svujldwt3#

甚至比curl更简单-只需使用PHP get_headers()函数,该函数返回您指定的任何URL的所有头信息的数组。另一个真实的检查远程文件存在的简单方法是使用fopen()并尝试以读取模式打开URL(您需要为此启用allow_url_fopen)。
只要看看PHP手册中的这些函数,它都在那里。

8ljdwjyq

8ljdwjyq4#

我推荐使用Guzzle Client,它基于CURL库,但更简单优化
安装:

composer require guzzlehttp/guzzle

字符串
以您的案例为例:

// create guzzle object
$client = new \GuzzleHttp\Client();

// send request
$response = $client->head("https://example.com");

// extract headers from response
$headers = $response->getHeaders();


又快又简单。
Read more here

lfapxunr

lfapxunr6#

作为对PHP的补充,也许有人来这里寻找在浏览器中使用seeHEAD动词的方法,Ajax也允许你像GET和POST一样使用它。
这个信息最好的部分是Ajax允许我们在浏览器检查器(网络选项卡)中看到正在执行的实际方法HEAD。PHP Curl运行在服务器端,所以,浏览器检查器将只显示php文件的GET,而不是curl HEAD操作。这是针对Ajax的:

xmlhttp.open("HEAD", url);
xmlhttp.send();

字符串
同样,当“readystatechanges”

xmlhttp.status // (200 meaning 'OK, success', 404 'not found', etc)


要检索像“Content-Length”这样的头属性,在获得状态200之后,在同一代码块中,您可以使用以下命令检索这些属性:

xmlhttp.getResponseHeader('Content-Length');
 // and for all:
 xmlhttp.getAllResponseHeaders();

相关问题