无法使用Webrequest

时间:2018-01-03 16:15:19

标签: c# web

我正在尝试使用.Net访问网址但是当我运行我的程序时,我收到错误The remote server returned an error: (403) Forbidden.现在,问题是如果我点击链接http://thisIsMyUR,然后输入用户名和密码,如下面的代码所示。它完全有效。我无法理解为什么会出现这种异常?请参考下面的代码。

备注:我正在使用下面的示例函数在Jenkins Server中触发我的项目的构建。

string url = "http://thisIsMyURL";
WebRequest webRequest = WebRequest.Create(url);
webRequest.Credentials = new NetworkCredential("admin", "pass");
WebResponse response = webRequest.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string responseText = reader.ReadToEnd();

2 个答案:

答案 0 :(得分:1)

除了Bradley Uffner在评论中推荐的内容之外,您还可以尝试在请求期间提供实际的用户代理。我已经看到某些服务器因为一些奇怪的安全原因而无法响应没有该标头的请求。

编辑:根据要求,我会更新一些信息。

某些服务器可能会选择忽略请求,在不满足某些条件时会提供一些错误代码(或关闭连接)。检查是否是这种情况的一种好方法是实际发送请求中普通Web浏览器发送的所有标准标头。 "用户代理"是这些标题之一,此示例将其添加到您的请求中:

string url = "http://thisIsMyURL";
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.UserAgent = "USER AGENT VALUE";
HttpWebRequest.Credentials = new NetworkCredential("admin", "pass");
WebResponse response = webRequest.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string responseText = reader.ReadToEnd();

需要转换为HttpWebRequest,以便您可以访问UserAgent标头字段。其他标准HTTP字段可以通过这种方式访问​​。

您可以使用浏览器开发者工具(通常右键点击网页 - >检查元素 - >网络)检查您选择的浏览器发送的标题。

答案 1 :(得分:0)

我在一些文章的帮助下弄明白了。需要添加基本身份验证。以下是一个示例。

 var userName = "admin;"
 var password = "password";
 var encodedAuthentication = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(userName + ":" + password));
 webRequest.Headers.Add("Authorization", "Basic " + encodedAuthentication);