获取正确的 HTTP 状态码 PHP。

4

当我访问谷歌时,我的代码给出了HTTP状态码302,但是当我使用Firefox浏览器访问并通过Firebug检查状态时,状态为200。

以下是我的代码:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

我也试过使用get_headers但它给出了301状态。

get_headers($url);

编辑:结果如下

array (size=26)
  'url' => string 'https://www.google.com.cy/?gws_rd=cr&ei=SIeOUo7bGuKH0AWO14CYDQ' (length=62)
  'content_type' => string 'text/html; charset=UTF-8' (length=24)
  'http_code' => int 302
  'header_size' => int 1673
  'request_size' => int 317
  'filetime' => int -1
  'ssl_verify_result' => int 0
  'redirect_count' => int 2
  'total_time' => float 0.561
  'namelookup_time' => float 0
  'connect_time' => float 0.078
  'pretransfer_time' => float 0
  'size_upload' => float 0
  'size_download' => float 0
  'speed_download' => float 0
  'speed_upload' => float 0
  'download_content_length' => float 0
  'upload_content_length' => float 0
  'starttransfer_time' => float 0
  'redirect_time' => float 0.405
  'certinfo' => 
    array (size=0)
      empty
  'primary_ip' => string '173.194.112.247' (length=15)
  'primary_port' => int 443
  'local_ip' => string '192.168.2.3' (length=11)
  'local_port' => int 55015
  'redirect_url' => string '' (length=0)

1
这些标头是与您的 cURL 请求还是页面输出有关的? - Scuzzy
@Scuzzy,我不明白你的问题。我向google.com发出了http请求,它给了我这个http状态码。 - biox
2个回答

3

你正在使用哪个网址访问谷歌?

我使用了你上面的代码,设置为:

$url = 'http://www.google.com';

并在curl信息中收到200响应。

我正在测试的完整代码:

奇怪 - 我正在使用:

$url = 'http://www.google.com';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

var_dump($info);

我接收到的var_dump输出:

数组(26) { ["url"]=> 字符串(61) "https://www.google.co.uk/?gws_rd=cr&ei=fIaOUsflOqnG0QXy74DYDg" ["content_type"]=> 字符串(24) "text/html; charset=UTF-8" ["http_code"]=> 整数(200) ["header_size"]=> 整数(2462) ["request_size"]=> 整数(493) ["filetime"]=> 整数(-1) ["ssl_verify_result"]=> 整数(0) ["redirect_count"]=> 整数(2) ["total_time"]=> 浮点数(0.286363) ["namelookup_time"]=> 浮点数(7.1E-5) ["connect_time"]=> 浮点数(0.011754) ["pretransfer_time"]=> 浮点数(0.082954) ["size_upload"]=> 浮点数(0) ["size_download"]=> 浮点数(119772) ["speed_download"]=> 浮点数(418252) ["speed_upload"]=> 浮点数(0) ["download_content_length"]=> 浮点数(262) ["upload_content_length"]=> 浮点数(0) ["starttransfer_time"]=> 浮点数(0.156201) ["redirect_time"]=> 浮点数(0.076769) ["certinfo"]=> 数组(0) { } ["primary_ip"]=> 字符串(14) "173.194.34.183" ["primary_port"]=> 整数(443) ["local_ip"]=> 字符串(12) "192.168.0.15" ["local_port"]=> 整数(54606) ["redirect_url"]=> 字符串(0) "" }


请参见下面根据您的结果修订的答案。 - steve

1

即使没有国家重定向,我仍然得到相同的状态码...但是我使用了一个在线PHP编译器,我的代码返回了200状态码。所以问题在于我的国家:)谢谢你的尝试...我将把302状态视为成功。 - biox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接