我无法让代码工作。我需要访问一个只有一行文本的网站,并在cmd提示符下显示它。该网站受密码保护,所以我使用webClient存储cookie,并试图找出如何给它的用户名和密码。 "使用"声明不起作用,有人知道我可以尝试什么吗?
using System;
using System.Net;
namespace Temperature
{
public class CookieAwareWebClient : WebClient
{
public CookieContainer m_container = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = m_container;
}
return request;
}
using (var client = new CookieAwareWebClient());
var values = new NameValueCollection
{
{"username", "admin"},
{"password","secret"},
};
client.UpLoadValues("http://10.10.1.52:8001/get?OID4.3.2.1=", values);
string tempString = client.DownloadString("http://10.10.1.52:8001/get?OID4.3.2.1=");
Stream response = myClient.OpenRead("http://10.10.1.52:8001/get?OID4.3.2.1=");
Console.WriteLine(tempString);
}
}
答案 0 :(得分:9)
您没有正确使用using
块。这样:
using (var client = new CookieAwareWebClient());
与此基本相同:
using (var client = new CookieAwareWebClient())
{
}
您创建变量,但在代码块中不对其执行任何操作。所以它立即超出了范围。
将代码移动到该代码块中以使用您创建的变量:
using (var client = new CookieAwareWebClient())
{
var values = new NameValueCollection
{
{"username", "admin"},
{"password","secret"},
};
client.UpLoadValues("http://10.10.1.52:8001/get?OID4.3.2.1=", values);
string tempString = client.DownloadString("http://10.10.1.52:8001/get?OID4.3.2.1=");
// etc.
}
除了理解using
块真正做什么之外,它在逻辑上等同于:
try
{
var client = new CookieAwareWebClient();
// any code you add to the block
}
finally
{
client.Dispose();
}
与任何try
块一样,任何使用该块中声明的变量的代码也需要在该块内。
答案 1 :(得分:0)
您已使用using (var client ...)
终止了;
,因此无法再访问client
。因此,您需要做的是将其余代码括在using block
。
using (var client = new CookieAwareWebClient())
{
var values = new NameValueCollection
{
{"username", "admin"},
{"password","secret"},
};
client.UpLoadValues("http://10.10.1.52:8001/get?OID4.3.2.1=", values);
string tempString = client.DownloadString("http://10.10.1.52:8001/get?OID4.3.2.1=");
Stream response = myClient.OpenRead("http://10.10.1.52:8001/get?OID4.3.2.1=");
Console.WriteLine(tempString);
}
注意:我对myClient
有点困惑的是在using block
之外声明的拼写错误或任何目的的完整变量。
答案 2 :(得分:0)
你应该使用这样的:
using (var client = new CookieAwareWebClient())
{
var values = new NameValueCollection
{
{"username", "admin"},
{"password","secret"},
};
client.UpLoadValues("http://10.10.1.52:8001/get?OID4.3.2.1=", values);
string tempString = client.DownloadS`enter code here`tring("http://10.10.1.52:8001/get?OID4.3.2.1=");
Stream response = myClient.OpenRead("http://10.10.1.52:8001/get?OID4.3.2.1=");
}
因为在启动和处理时使用创建“客户端”,然后完成使用块。