开发者

PHP get_headers() alternative

开发者 https://www.devze.com 2023-03-07 08:26 出处:网络
I need aPHP script that reads the HTTP respons开发者_JS百科e code for each URL request. something like

I need a PHP script that reads the HTTP respons开发者_JS百科e code for each URL request.

something like

$headers = get_headers($theURL);
return substr($headers[0], 9, 3);

The problem is the get_headers() function is disabled at server level, as a policy.So it doesn't work.

The question is how to get the HTTP response code for a URL?


If cURL is enabled, you can use it to get the whole header or just the response code. The following code assigns the response code to the $response_code variable:

$curl = curl_init();
curl_setopt_array( $curl, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => 'http://stackoverflow.com' ) );
curl_exec( $curl );
$response_code = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
curl_close( $curl );

To get the whole header you can issue a HEAD request, like this:

$curl = curl_init();
curl_setopt_array( $curl, array(
    CURLOPT_HEADER => true,
    CURLOPT_NOBODY => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => 'http://stackoverflow.com' ) );
$headers = explode( "\n", curl_exec( $curl ) );
curl_close( $curl );


Use HttpRequest if you can: http://de2.php.net/manual/en/class.httprequest.php

$request = new HttpRequest("http://www.example.com/");
$request->send();
echo $request->getResponseCode();

Or do it the hard way: http://de2.php.net/manual/en/function.fsockopen.php

$errno = 0;
$errstr = "";

$res = fsockopen('www.example.com', 80, $errno, $errstr);

$request = "GET / HTTP/1.1\r\n";
$request .= "Host: www.example.com\r\n";
$request .= "Connection: Close\r\n\r\n";

fwrite($res, $request);

$head = "";

while(!feof($res)) {
    $head .= fgets($res);
}

$firstLine = reset(explode("\n", $head));
$matches = array();
preg_match("/[0-9]{3}/", $firstLine, $matches);
var_dump($matches[0]);

Curl may be also a good option, but the best option is to beat your admin ;)


You can build and read your own HTTP queries with fsockopen and regular file operations. Check out my earlier answer on this topic:

Are there any other options for rest clients besides CURL?

0

精彩评论

暂无评论...
验证码 换一张
取 消