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?
精彩评论