1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 解决php curl获取网页内容提示405 method not allowed状态码

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

时间:2020-10-11 16:54:15

相关推荐

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

php教程|php手册

curl获取网页内,提示405,method

php教程-php手册

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

新生网上报名源码,ubuntu的声卡dsp,tomcat日志第一列数字,python爬虫教程表,php接口并发post接收错乱,seo招聘 菠菜lzw

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

oa办公系统安卓源码下载,ubuntu软件更新死机,tomcat7 找不到文件,制作爬虫缸,php和java哪个有未来,小猪视频seolzw

<?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(curl_init); 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 == ipv6) { 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, GET); //清除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, Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11); 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手册发现只要简单的修改一下即可.

诱导源码是什么意思,ubuntu改中文灰色,tomcat重启是否要清缓存,常用爬虫手段,bat与php的区别,seo实验结果lzw

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

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

导致403错误是要是由于curl默认是用post方式进行提交访问的,post方式在此域名下是没有权限的,如我在测试的时候就出现了此问题,在我修改为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, GET);

//命令行的形式为:

curl -v

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

<?php $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); //设置curl默认访问为IPv4 if(defined(CURLOPT_IPRESOLVE) && defined(CURL_IPRESOLVE_V4)){ 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及以上版本时,以上设置才生效.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。