1 /// <summary>
2 /// 通过 WebRequest/WebResponse 类访问远程地址并返回结果,需要Basic认证;
3 /// 调用端自己处理异常
4 /// </summary>
5 /// <param name="uri"></param>
6 /// <param name="timeout">访问超时时间,单位毫秒;如果不设置超时时间,传入0</param>
7 /// <param name="encoding">如果不知道具体的编码,传入null</param>
8 /// <param name="username"></param>
9 /// <param name="password"></param>
10 /// <returns></returns>
11 public static string Request_WebRequest(string uri, int timeout, Encoding encoding, string username, string password)
12 {
13 string result = string.Empty;
14
15 WebRequest request = WebRequest.Create(new Uri(uri));
16
17 if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
18 {
19 request.Credentials = GetCredentialCache(uri, username, password);
20 request.Headers.Add("Authorization", GetAuthorization(username, password));
21 }
22
23 if (timeout > 0)
24 request.Timeout = timeout;
25
26 WebResponse response = request.GetResponse();
27 Stream stream = response.GetResponseStream();
28 StreamReader sr = encoding == null ? new StreamReader(stream) : new StreamReader(stream, encoding);
29
30 result = sr.ReadToEnd();
31
32 sr.Close();
33 stream.Close();
34
35 return result;
36 }
37
38 #region # 生成 Http Basic 访问凭证 #
39
40 private static CredentialCache GetCredentialCache(string uri, string username, string password)
41 {
42 string authorization = string.Format("{0}:{1}", username, password);
43
44 CredentialCache credCache = new CredentialCache();
45 credCache.Add(new Uri(uri), "Basic", new NetworkCredential(username, password));
46
47 return credCache;
48 }
49
50 private static string GetAuthorization(string username, string password)
51 {
52 string authorization = string.Format("{0}:{1}", username, password);
53
54 return "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(authorization));
55 }
56
57 #endregion
58
59 basic验证的WebRequest/WebResponse