我正在使用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;
}
答案 0 :(得分:2)
通过CURL检查网址是否存在 参考: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
请求已成功。随响应返回的信息取决于请求中使用的方法,例如:
在响应中发送与所请求资源相对应的实体;
HEAD对应于所请求资源的实体标题字段在响应中发送,没有任何消息体;
POST一个描述或包含行动结果的实体;
跟踪包含终端服务器收到的请求消息的实体。
201 Created
已完成请求并导致创建新资源。新创建的资源可以由响应实体中返回的URI引用,其中包含Location头字段给出的资源的最具体URI。
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