爬虫发起抓取被服务器拒绝访问返回403禁止访问解决方案

摘要:
目前,许多网站的API接口返回的http代码返回代码为403,表示禁止访问。如果您也遇到这种情况,请不要急于首先修改网站的相关参数,即高级api的网站。使用浏览器访问。如果浏览器访问api接口,它可以成功。表示已设置权限。接口可能已被修改或无效,此时无法访问。调用此接口时,将捕获异常中的responseBody。数据很可能在该区域。这就是作者遇到的问题。直接代码:try{//这里,调用api接口}catch{varstrm=ex.Response.GetResponseStream();strm.Position=0;StreamReaderror=newStreamReader;stringer=reader.ReadToEnd();//这里,如果(!

现在很多网站的api接口返回httpcode返回码是403提示禁止访问。如果您也遇到这样的情况,请先不要急着去修改网站相关的参数

第一、先进api的网站。用浏览器访问,如果浏览器访问该api接口能成功。说明是设置了权限的问题。如果不能成功的话。很可以是该接口已修改或已失效,这时候就没办法访问了。

第二、如果浏览器能访问成功的话。那就好办了。调用该接口时,捕获异常中的responseBody,很有可能数据就在这里面,笔者就遇到的是这种问题。

直接上代码:

try
            {
               //这里调用api接口
            }
            catch (WebException ex)
            {
                var strm = ex.Response.GetResponseStream();
                strm.Position = 0;
                StreamReader reader = new StreamReader(strm);
                string error = reader.ReadToEnd();
                //这里看error里面的值是否有你想要的值
                if (!string.IsNullOrWhiteSpace(error))
                {
                    var result = JsonConvert.DeserializeObject<JObject>(error)["result"]["results"];
                    if (result == null)
                        return null;
                    var customer = JsonConvert.DeserializeObject<JArray>(result.ToString());
                    if (customer == null)
                        return null;
                    List<InvTitle> list = new List<InvTitle>();
                    foreach (var item in customer)
                    {
                        InvTitle mc = new InvTitle()
                        {
                            Name = item["entName"] != null ? item["entName"].ToString() : "",
                            TaxCode = item["credCode"] != null ? item["credCode"].ToString() : "",
                            State = "y",
                            CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                            UpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                        };
                        list.Add(mc);
                        if (list.Count == 4)
                            break;
                    }
                    return list;
                }

                return null;
            }

免责声明:文章转载自《爬虫发起抓取被服务器拒绝访问返回403禁止访问解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【原生】CocosCreator Android和游戏的通讯 (Java和TS互相调用、传递JSON数据、监听返回键)Windows 7集成IE11(离线安装包、补丁)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

IPI 通信(SMP)【转】

在MIPS架构下的IPI通信被关闭和中断后,IPIMIPS接口结构平台也将被发送_ smp_Ops{void;void;…}IPI通信是多个处理器之间的通信。send_ ipi_Single:一对一聊天send_ ipi_Mask:Mask posting,Mask表示Mask posting/*Octeon Tellanothercore of Lushi...

PbootCMS后台增加轮播图自定义分组名称

我们知道,在PbootCMS后台的旋转木马图形模块中,当添加新的旋转木马图时,您不能自己选择组。相反,您可以自动创建组,例如组1、组2和组3。这显然对客户的体验不友好,而且您无法直观地知道在网页的哪个位置使用了旋转木马图。让我们分享一下如何启用PbootCMS后台来添加、删除和修改旋转木马图形组。...

webstorm关闭烦人的eslint语法检查

使用eslint语法检查后,我们发现JS代码中到处都是红线。通过右键菜单中的fixeslint problems选项,我们可以发现页面代码格式完全被eslint包装。只需关闭exlint语法检查。看不见,想不起来。反向关闭不会影响代码开发,但相反,它会影响代码开发。关闭eslint位置:文件--˃设置--˃语言和框架--˃CodeQualityTools--...

如何在Android模拟器上安装apk文件

如本实例的“mishop_2.0.20130911_1.1.1.apk”3.执行控制台命令,进行安装。切换到D盘,输入D:,然后点击Enter,即切换到D盘,输入cd,找到platform-tools的文件地址,即adb.exe的文件路径。,粘贴在控制台中。...

MarkDown技巧:两种方式实现页内跳转

MarkDown技术:有两种方法可以跳转到页面上的电子邮件地址:JohnTsai.Work@gmail.com,欢迎交流讨论。我喜欢MarkDown简单直观的写作风格。...

GitLab的基础使用-创建用户(users)

否则,将追究法律责任。1、 以管理员身份登录GitLab的WebUI,并创建用户1˃使用管理员登录GitLab。管理员登录成功后,点击下图所示的小扳手,然后点击进入管理员的Dashboard界面。如果时间间隔过长,可以要求运维人员重置密码。操作和维护人员可以参考第一步来重置用户的密码。实际上,您也可以通过参考第三步中的方法找到自己的密码,而不必麻烦操作和维护...