0

我正在使用 Curl 来查找网站的状态代码。这是对用户在表单中输入 url 的响应,基本上我只是想检查 url 是否有效,所以我认为最好的方法是只允许某些可能没问题的代码。但这并不像预期的那样工作。对于 EG tesco 返回 503,Marks&Sparks 返回 405。所以看起来可能有更多的状态代码实际上是好的,但对我来说似乎不应该是好的。

所以...我的问题是,我应该信任哪些 http 状态代码。还是我应该反过来做,并传递除某些特定状态代码之外的所有内容?

为了完整起见,万一它对任何人有帮助,以下是我获取状态码的方式:

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_NOBODY, true);
$result = curl_exec($curl);
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
if ($statusCode == 200 || $statusCode == 300 || $statusCode == 301 || $statusCode == 302 || $statusCode == 303 || $statusCode == 307 || $statusCode ==) {
    $ret = true;   
}
4

1 回答 1

2

通过 CURL 检查是否存在 url
参考:http ://www.php.net/manual/en/function.file-exists.php#74469

<?php
function url_exists($url) {
    if (!$fp = curl_init($url)) return false;
    return true;
}
?>

根据您的疑问,一些状态代码和参考

200 OK

请求已成功。响应返回的信息取决于请求中使用的方法,例如:

GET 在响应中发送与请求的资源对应的实体;

HEAD 请求资源对应的实体头字段在响应中发送,不带任何消息体;

POST 描述或包含操作结果的实体;

TRACE 包含终端服务器收到的请求消息的实体。

201 Created

请求已完成并导致创建新资源。新创建的资源可以被响应实体中返回的 URI 引用,资源的最具体的 URI 由 Location 头字段给出。

202 Accepted

请求已被接受处理,但处理尚未完成。该请求最终可能会或可能不会被执行,因为在实际进行处理时它可能会被禁止。无法从诸如此类的异步操作中重新发送状态代码。

203 Non-Authoritative Information

实体标头中返回的元信息不是原始服务器可用的最终集,而是从本地或第三方副本收集的。呈现的集合可能是原始版本的子集或超集。例如,包含有关资源的本地注释信息可能会导致源服务器已知的元信息的超集。不需要使用此响应代码,仅当响应为 200(OK)时才适用。

204 No Content

服务器已完成请求,但不需要返回实体主体,并且可能希望返回更新的元信息。响应可能包括实体头形式的新的或更新的元信息,如果存在,应该与请求的变体相关联。

205 Reset Content

服务器已经完成了请求并且用户代理应该重置导致请求被发送的文档视图。此响应主要是为了允许通过用户输入进行操作的输入,然后清除给出输入的表单,以便用户可以轻松地启动另一个输入操作。响应不得包含实体。

读这个

http://www.seocentro.com/articles/apache/http-status-codes.html
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
http://www.w3.org/Protocols/rfc2616/rfc2616- sec10.html

于 2013-03-23T01:47:20.523 回答