php中的Curl返回404响应代码,即使url正在工作

php中的Curl返回404响应代码,即使url正在工作,php,curl,libcurl,centos6.5,Php,Curl,Libcurl,Centos6.5,我在CentOs 6.5中使用PHP5.4 我正在尝试获取url的响应代码,下面是我的代码片段 $URL="http://www.bertuccis.com/#menu"; try{ $c = curl_init(); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($c, CURLOPT_FOLLOWL

我在CentOs 6.5中使用PHP5.4

我正在尝试获取url的响应代码,下面是我的代码片段

$URL="http://www.bertuccis.com/#menu";
try{

    $c = curl_init();
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($c, CURLOPT_USERAGENT,'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36');
    curl_setopt($c, CURLOPT_URL, $URL);
    $contents = curl_exec($c);
    $httpCode = curl_getinfo($c, CURLINFO_HTTP_CODE);
    curl_close($c);

    echo 'Resp Code ' . $httpCode;
} catch(Exception $ex){
    print_r($ex);
}
它返回404HTTP响应代码。若我在浏览器中尝试相同的url,它将返回200 Ok

我试着在centos机器的终端上使用curl-v,但效果很好

下面是curl和php curl的版本信息

我的centos中的Curl lib是:Curl 7.24.0(x86_64-unknown-linux-gnu)libcurl/7.24.0

我的php信息中的php卷曲信息:

cURL support => enabled
cURL Information => 7.19.7
Age => 3
Features
AsynchDNS => No
Debug => No
GSS-Negotiate => Yes
IDN => Yes
IPv6 => Yes
Largefile => Yes
NTLM => Yes
SPNEGO => No
SSL => Yes
SSPI => No
krb4 => No
libz => Yes
CharConv => No
Protocols => tftp, ftp, telnet, dict, ldap, ldaps, http, file, https, ftps, scp, sftp
Host => x86_64-redhat-linux-gnu
SSL Version => NSS/3.15.3
ZLib Version => 1.2.3
libSSH Version => libssh2/1.4.2

这是curl中的一个bug,已在7.28.1中修复(根据本页)


注意:现代浏览器不会根据请求发送片段部分。但是你的url发送它,这是有区别的。

试着删除#菜单部分,看看这是否有区别。@Styphone如果我将从url中删除#菜单,它会工作,但同样的url也用于许多其他用途。所以我不能修改用户给出的url,我用你的代码得到200。(Ubuntu,PHP5.5,curl7.35)@Gerald,你系统中的curl版本将是相同的,我有不同的版本,如果linux用户需要,你可以在终端上使用curl-V和PHP-i进行检查。如果curl-V和php-i的版本大于7.19,那么解决方案就是更新curl。