PHP调用W3C API校验HTML返回405 Method Not Allowed错误如何解决
问题现象
PHP中通过cURL提交HTML到W3C接口做规范校验时,返回405错误,错误返回内容如下:
array(4) { ["type"]=> string(46) "https://tools.ietf.org/html/rfc2616#section-10" ["title"]=> string(17) "An error occurred" ["status"]=> int(405) ["detail"]=> string(18) "Method Not Allowed" }
问题根因与排查步骤
- 核心错误:请求接口地址不匹配
你当前代码中请求的https://api.w3.org/groups是W3C用于查询工作组信息的公开接口,该接口仅支持GET请求,完全不提供HTML校验能力,向该地址发POST请求必然返回405 Method Not Allowed。你查阅的W3C通用API文档仅覆盖组织、用户、工作组这类信息查询接口,不包含HTML校验服务的相关说明,两者属于完全独立的两套服务。 - 请求头配置存在多处无效设置
- 提交HTML内容却错误设置
Content-type: application/json,不符合接口接收规则 Access-Control-Allow-Origin、Access-Control-Allow-Credentials属于服务端返回给客户端的响应头,在客户端请求中携带没有任何作用,会被服务端忽略- 单独设置
charset: utf-8属于无效写法,字符集声明需要拼接在Content-Type头中
- 提交HTML内容却错误设置
- 调用逻辑认知偏差
W3C HTML规范校验服务部署在独立域名下,不需要使用你申请的api.w3.org域名下的通用API Key,公开调用仅需控制请求频率避免触发限流即可。
修正后的实现代码
// 注意:原测试HTML本身存在标签语法错误,此处补全了a标签的href属性与闭合标签 $html = '<h1>Hello<a href="hello.html">test</a>'; $curl = curl_init(); curl_setopt_array($curl, array( // 替换为W3C校验服务的正确接口地址,out=json指定返回JSON格式校验结果 CURLOPT_URL => "https://validator.w3.org/nu/?out=json", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $html, CURLOPT_HTTPHEADER => array( "User-Agent: PHP HTML Validator/1.0", "Cache-Control: no-cache", // 正确设置内容类型,移除无效的CORS相关请求头 "Content-Type: text/html; charset=utf-8" ), )); $response = curl_exec($curl); $err = curl_error($curl); $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if ($err) { die('cURL请求错误: ' . $err); } if ($httpCode !== 200) { die('校验服务返回异常,状态码:' . $httpCode . ' 返回内容:' . $response); } // 解析JSON格式的校验结果 $result = json_decode($response, true); var_dump($result);
补充说明
- 修正代码后提交请求,校验服务会返回结构化的错误提示,包含你写的HTML片段中所有不符合规范的位置与原因
- 如果需要提交本地文件或者公网可访问的URL做校验,可以调整传参方式:提交公网URL可拼接
?doc=你的页面地址&out=json用GET方式请求,提交本地文件可将内容读取后按上述POST方式发送即可 - 不要在客户端请求中设置CORS相关响应头,这类配置是服务端需要处理的逻辑,客户端添加不会产生任何效果
内容的提问来源于stack exchange,提问作者Damir Shaykxutd
相关产品推荐
相关产品推荐

