如果我需要向需要登录凭据的站点发出 HttpRequest,我可以使用类似于以下的代码,但正如您所见,用户名和密码只是 base64 编码,这意味着如果有人要拦截所有 http 请求他们要做的是搜索与“授权”标头关联的值,并且他们有我的登录信息。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://...");
request.Headers.Add("Authorization",
string.Format("Basic {0}", Convert.ToBase64String(Encoding.Default.GetBytes(
string.Format("{0}:{1}", username, password)))));
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream s = response.GetResponseStream())
{
using (StreamReader r = new StreamReader(s))
{
DoSomething(r.ReadToEnd());
}
}
}
下面的代码是更好的选择,还是它也使用“基本”授权标头发出 http 请求?
WebClient wc = new WebClient();
wc.Credentials = new NetworkCredential(username, password);
DoSomething(wc.DownloadString("https://..."));
如果两个代码都没有导致“隐藏”登录凭据的 http 请求,并且实际上有一种方法可以“隐藏”它们,那么正确的方法是什么?