zoukankan      html  css  js  c++  java
  • 爬虫发起抓取被服务器拒绝访问返回403禁止访问解决方案

    现在很多网站的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;
                }
  • 相关阅读:
    Java中读取.properties配置文件的通用类
    静态工厂方法中单例的延迟加载技术
    AVL树C++实现
    初探Java反射机制
    项目中一个 1 毫秒引发的问题
    用Java操作数据库Datetime数据
    【转】Linux中的EAGAIN含义
    【转】关于编译链接——gcc/g++
    《Linux多线程编程手册》读书笔记
    《Linux多线程服务端编程——使用muduo C++网络库》读书笔记
  • 原文地址:https://www.cnblogs.com/xuwendong/p/7514736.html
Copyright © 2011-2022 走看看