说明:前段时间做的一个项目莫名的返回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. 修改TFS与本地源代码映射路径

    使用源代码管理资源管理器修改工作区 在“文件”菜单上单击“源代码管理”,再单击“工作区”. 在“管理工作区”对话框的“名称”列下,突出显示要修改的工作区,然后单击“编辑”. 在“编辑工作区”对话框中: ...

  2. 线程池Executors探究

    线程池用到的类在java.util.concurrent包下,核心类是Executors,通过其不同的几个方法可产生不同的线程池. 1.生成固定大小的线程池 public static Executo ...

  3. OpenVPN客户端解析

    windows版本的VPN客户端,实际上就是一个外壳,创建了图形界面,托盘,和 右键菜单, 在connect的动作里,实际上是通过cmd调用 openvpn.exe openvpn --config ...

  4. HTTP 返回状态值详解

    当用户点击或搜索引擎向网站服务器发出浏览请求时,服务器将返回Http Header Http头信息状态码,常见几种如下: 1.Http/1.1 200 OK 访问正常  表示成功访问,为网站可正常访问 ...

  5. python unitest基本

    基本 import unittest class OneTest(unittest.TestCase): def setUp(self): self.verificationErrors = [] s ...

  6. Linux中seq命令的用法

    用于产生从某个数到另外一个数之间的所有整数 例一: # seq 1 10 结果是1 2 3 4 5 6 7 8 9 10 例二: #!/bin/bash for i in `seq 1 10`; do ...

  7. Struts2(result 流 )下载

    jsp: <body> <a href="stream.action?fileName=psb.jpg">psb</a> <br> ...

  8. MVC4数据注解和验证

    model中的验证注解特性: public class StuInfo { public int ID { get; set;} [Display(Name = "姓名")] // ...

  9. vs 发布web应用程序时,找不到cs文件错误

    将*.aspx.*.ascx.*.master所有出错页面文件中的 CodeFile="******.aspx.cs" 批量替换成 Codebehind="******. ...

  10. Q_DISABLE_COPY

    QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY() 宏放在了private区域.因此所有继承自 ...