首页 php教程 php手册 解决php curl获取网页内容提示405 method not allowed状态码

解决php curl获取网页内容提示405 method not allowed状态码

Jun 02, 2016 am 09:14 AM
method

在使用php curl获取网页内容有些网站提示405 method not allowed状态码了,这个问题我分析了出问题的网站是因为ipv6而导致了,所以我们只要简单的调整一下就可以解决这个问题了,下面一起来看看吧.

1.php curl ipv4使用例子,代码如下:

<?php
/** 
 * http测试
 * 注:PHP版本5.2以上才支持CURL_IPRESOLVE_V4
 * @param $url 网站域名
 * @param $type 网站访问协议
 * @param $ipresolve 解析方式
 */
public function web_http($url, $type, $ipresolve) {
    //设置Header头
    $header[] = "Accept: application/json";
    $header[] = "Accept-Encoding: gzip";
    $httptype = function_exists(&#39;curl_init&#39;);
    if (!$httptype) {
        $html = file_get_contents($url);
    } else {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        //输出头信息
        curl_setopt($ch, CURLOPT_HEADER, 1);
        //递归访问location跳转的链接,直到返回200OK
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        //不对HTML中的BODY部分进行输出
        curl_setopt($ch, CURLOPT_NOBODY, 1);
        //将结果以文件流的方式返回,不是直接输出
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //以IPv4/IPv6的方式访问
        if ($ipresolve == &#39;ipv6&#39;) {
            curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
        } else {
            curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
        }
        //添加HTTP header头采用压缩和GET方式请求
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_ENCODING, "gzip");
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, &#39;GET&#39;);
        //清除DNS缓存
        curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 0);
        //设置连接超时时间
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
        //设置访问超时
        curl_setopt($ch, CURLOPT_TIMEOUT, 50);
        //设置User-agent
        curl_setopt($ch, CURLOPT_USERAGENT, &#39;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11&#39;);
        if ($type == "https") {
            //不对认证证书来源的检查
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            //从证书中检查SSL加密算法是否存在
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
        }
        //执行Curl操作
        $html = curl_exec($ch);
        //获取一个cURL连接资源句柄的信息(获取最后一次传输的相关信息)
        $info = curl_getinfo($ch);
        curl_close($ch);
    }
    return $info;
}
登录后复制

上面代码在ipv4是没有任何问题了,如果在了ipv6网站就会返回405 method not allowed状态码了,那么我们查看了php手册发现只要简单的修改一下即可.

以上为我编写的一个基本curl访问的方法,因为我这里需要通过使用IPv6的方式,所以加了相应的选项,相信大家能看的明白,平时经常用到的选项上面都有出现,大家根据需要摘取.

405/Method Not Allowed,表示不支持请求的方法,这个错误不常见.

导致403错误是要是由于curl默认是用post方式进行提交访问的,post方式在此域名下是没有权限的,如我在测试www.phprm.com的时候就出现了此问题,在我修改为get的方式,并且增加了header头后,即可正常访问,个人推测,或许是亚马逊那边基本上都是采用get的方式,才会被认为是人为的点击,对post做了相应屏蔽.

ipv6增加了如下代码:

//设置Header头 
$header[] = "Accept: application/json"; 
$header[] = "Accept-Encoding: gzip"; 
//添加HTTP header头采用压缩和GET方式请求 
curl_setopt( $ch, CURLOPT_HTTPHEADER, $header ); 
curl_setopt($ch,CURLOPT_ENCODING , "gzip"); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, &#39;GET&#39;);
登录后复制

//命令行的形式为:

curl -v www.phprm.com

IPV6下curl超时问题,代码如下:

<?php 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
//设置curl默认访问为IPv4 
if(defined(&#39;CURLOPT_IPRESOLVE&#39;) && defined(&#39;CURL_IPRESOLVE_V4&#39;)){ 
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
} 
//设置curl请求连接时的最长秒数,如果设置为0,则无限 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
//设置curl总执行动作的最长秒数,如果设置为0,则无限 
curl_setopt ($ch, CURLOPT_TIMEOUT,$timeout*3); 
$file_contents = curl_exec($ch); 
curl_close($ch);
登录后复制

注:curl_setopt($ch,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4) 只有在php版本5.3及以上版本,curl版本7.10.8及以上版本时,以上设置才生效.


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)