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

在使用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尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中