说明:前段时间做的一个项目莫名的返回403的错误,这种情况也多大是程序员最不喜欢的了,没办法先来分析一下错误信息。之前的代码如下:

WebClient webclient = new WebClient();
string u9Str = webclient.DownloadString("http://www.uuu9.com/");

很简单的请求返回string信息的代码,最诧异的是这个返回 “远程服务器返回错误: (403) 已禁止。”的错误还是间歇性的,报错的几率很小但是肯定存在,因为查看错误日志让我找到了这个bug.

解决方案:

1.根据以往的经验推测403错误的原因分析。

2.既然是模拟访问,那么真实的访问是哪些东东呢,访问参数对比。

实施:

1.一般造成403原因是权限设置问题,也就是说可能没有权限造成的,那么访问的时候加上信任权限即可。

代码:webclient.Credentials = CredentialCache.DefaultCredentials; // 添加授权证书

2.真实请求的信息截图:

下面引用一段请求标头参数代表含义的信息:

Accept:浏览器可接受的MIME类型。    

Accept-Charset:浏览器可接受的字符集。   

Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。

Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。     Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。   

Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP   1.1(HTTP   1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。   

Content-Length:表示请求消息正文的长度。   

Cookie:这是最重要的请求头信息之一   

From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。   

Host:初始URL中的主机和端口。   

If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not  Modified”应答。   

Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。   

Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。   

User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。   

UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。  

每个标头独占一行, 最后必须要有一个空行。有关HTTP头完整、详细的说明,请参见http://www.w3.org/Protocols/的HTTP规范。

看来以上的对照觉得有用的就是2个信息需要设置,Host和User-Agent需要设置,如下:

webclient.Headers.Add("User-Agent", "Microsoft Internet Explorer");

webclient.Headers.Add("Host", "www.uuu9.com");

总结,完整代码如下:

WebClient webclient = new WebClient();
string u9Str = webclient.DownloadString("http://www.uuu9.com/"); // 以下为解决方案
webclient.Credentials = CredentialCache.DefaultCredentials; // 添加授权证书
webclient.Headers.Add("User-Agent", "Microsoft Internet Explorer");
webclient.Headers.Add("Host", "www.uuu9.com");

WebClient 访问间歇性返回403解决方案的更多相关文章

  1. img 标签 访问图片 返回403 forbidden问题

    之前在项目里,本地调试的时候,图片src引用了第三方网站的图片资源,导致控制台出现了如下的报错: 403 forbidden,说明了这个网络资源这样获取是被拒绝的,那么通过简单的百度,找到了相关的解决 ...

  2. 【反防盗链】img 标签 访问图片 返回403 forbidden问题

    解决方案,页面头添加 <meta name="referrer" content="no-referrer" /> 隐藏请求体中标注来源referr ...

  3. 记一次CDN大量探测处理方法,UA限制返回403

    起因: 发现源站流量阶段性异常,基本上每2小时高发到50M左右,并持续30分钟左右 排除过程: 在流量正常的时候,排查了各种可能性,均未果,观察监控,在流量再次增大时,发现该服务器上某一域名的访问日志 ...

  4. 请求Jenkins链接返回403

    使用python请求Jenkins链接,返回403 1.使用正确的账号密码(Jenkins -> 系统设置 -> 全局安全设置),该账户拥有访问该Jenkins链接的权限 2.代码中的账号 ...

  5. Scrapy shell调试返回403错误

    一.问题描述 有时候用scrapy shell来调试很方便,但是有些网站有防爬虫机制,所以使用scrapy shell会返回403,比如下面 C:\Users\fendo>scrapy shel ...

  6. 如何解析android访问webservice返回的SoapObject数据(可用)

    怎么解析android访问webservice返回的SoapObject数据 本帖最后由 kkDragon123 于 2013-03-26 15:50:07 编辑 我的数据如下:mingdanResp ...

  7. 关于tomcat访问managerapp出现403报错的解决方法

    最近工作需要在tomct下部署war包并访问. 学了几种方法后想从Tomcat Web Application Manager去部署. 但是启动tomcat后浏览器http://localhost:8 ...

  8. XAMPP:访问phpmyadmin出错的解决方案

    来源:http://www.ido321.com/1246.html XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建 XAMPP 软件站集成软件包,轻巧,用起来很方便.它提 ...

  9. github上传代码返回403错误

    报错代码: ****************   表示上传的项目地址 remote: Permission to Jayson00/camera.git denied to Minelinkinpar ...

随机推荐

  1. DHCP 协议的 8 种消息类型及功能服务器

    1) 主机发送 DHCP Discover 广播包在网络上寻找 DHCP 服务器: 单播数据包, 地址. 2) DHCP 服务器向主机发送 DHCP Offer 单播数据包,包含 IP 地址.MAC ...

  2. 《JavaScript高级程序设计》读书笔记 ---语句

    do-while语句do-while 语句是一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件.换句话说,在对条件表达式求值之前,循环体内的代码至少会被执行一次.以下是do-whil ...

  3. play框架概述

    今天是来百度实习的第四天,在项目过程中mentor说会用到play框架,当时就一个晕啊.Java还有一个叫play框架,作为一个从大三开始用java的重度javaer,居然不知道这个框架的存在,内心一 ...

  4. 4-static(静态变量)关键字

    1.使用static声明属性 static声明全局属性2.使用static声明方法 直接通过类名调用3.注意点 使用static方法的时候,只能访问static声明的属性和方法,而非static声明的 ...

  5. Windows进程间通信(中)

    二.文件映射 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容. W ...

  6. VI/VIM 常用命令

    VI/VIM 常用命令=========== 整理自鸟哥的私房菜 ---------- - 移动光标 命令                    | 描述----------------------- ...

  7. 在命令提示符下,怎么查看windows开启了哪些服务?

    net use \\ip\ipc$ " " /user:" " 建立IPC空链接 net use \\ip\ipc$ "密码" /user: ...

  8. apt-get 总结2

    本文列举了常用的APT命令参数: apt-cache search package 搜索软件包 apt-cache show package  获取包的相关信息,如说明.大小.版本等 sudo apt ...

  9. 1213 How Many Tables 简单的并查集问题

    my code: #include <cstdio>#include <cstring>#include<iostream>using namespace std; ...

  10. 【Valse首发】CNN的近期进展与实用技巧(上)

    作者:程程链接:https://zhuanlan.zhihu.com/p/21432547来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 深度学习大讲堂致力于推送人工智 ...