我正在使用PHP curl,我的目标url根据请求参数给出200或500。 但是如果使用curl_getinfo($ ch,CURLINFO_HTTP_CODE)抛出500或200,我将获得200。这是代码
/**
* use for get any file form a remote uri
*
* @param String $url
* @return String
*/
public function getFileUsingCurl($url)
{
//set all option
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$file = curl_exec($ch);
if (200 == curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
curl_close($ch);
return $file;
} else {
curl_close($ch);
return false;
}
}
如何从目标网址获取正确的HTTP代码?
答案 0 :(得分:2)
试试这个:
public function getFileUsingCurl($url)
{
//set all option
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$file = curl_exec($ch);
$curlinfo = curl_getinfo($ch);
curl_close($ch);
$httpcode = $curlinfo['http_code'];
if($httpcode == "200"){
return $file;
}else{
return false;
}
}
注意:
确保您没有被重定向(代码301 or 302
)
答案 1 :(得分:0)
curl_setopt($c, CURLOPT_HEADER, true); // you need this to get the headers
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
答案 2 :(得分:0)
您可以尝试使用终端上的网址来检查其状态代码:
curl -I www.site.com
(我知道这是一个问题,而不是回答,但我没有足够的stackoverflow代表评论但哈哈,所以当我有更多信息时,我会编辑这个答案)
答案 3 :(得分:0)
您应该使用curl_setopt($c, CURLOPT_HEADER, true);
在输出中包含标题。
http://www.php.net/manual/en/function.curl-setopt.php
然后使用var_dump($file)
查看它是否真的是200 ......
使用以下代码检查状态应该有效
$infoArray = curl_getinfo($ch);
$httpStatus = $infoArray['http_code'];
if($httpStatus == "200"){
// do stuff here
}
答案 4 :(得分:-2)
使用guzzle以合理的方式与CURL交互。然后你的脚本就像:
<?php
use Guzzle\Http\Client;
// Create a client and provide a base URL
$client = new Client('http://www.example.com');
$response = $client->get('/');
$code = $response->getStatusCode();