我正在使用WebClient.UploadData()登录到一个网站,但是为了能够在登录该网站后执行任何类型的操作,我无法这样做。我已经尝试使用httpclient了,但是不能。
var wc = WebClient();
string post = HttpUtility.UrlEncode("ctl00$ContentMain$login") + "=" + login +"&" + HttpUtility.UrlEncode("ctl00$ContentMain$password") + "=" + password + "&" + HttpUtility.UrlEncode("ctl00$ContentMain$btnCompletesummarized") + "=" + HttpUtility.UrlEncode("Complete summarized");
byte[] resposta = wc.UploadData(url, "POST", UTF8Encoding.Default.GetBytes(post));
resultado = UTF8Encoding.UTF8.GetString(resposta);
使用此代码,我可以登录该站点,但是要执行诸如单击已登录页面上的操作之类的操作,我不能。
登录后的按钮:
<input type = "submit" name = "btnCompleteConsultation" value = "Complete Consultation" id = "btnCompleteConsultation">
示例:我可以使用WebClient.UploadData()登录到我的Facebook,但是登录后能够单击“ messenger”之类的按钮,我无法使用WebClient模拟。
你们有什么提示可以帮助我解决这个问题吗?
答案 0 :(得分:0)
您要达到什么目标?
我发现您正在使用WebClient
对该URL进行POST。您期望得到什么?响应代码(200、500、404),完整的HTML?
首先,如果您只想知道服务器的响应是否正常,则可以执行以下操作:
WebRequest request = WebRequest.Create("http://www.google.com");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
response
将具有StatusCode
属性,以及有关请求及其响应的其他一些有用信息,例如字符集和cookie(如果要维护,可能会需要这些信息)会话-即保持登录状态-)。
如果要完整的HTML响应,可以从响应中获取流:
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
请注意,如果您期望响应中包含任何客户端内容(例如Javascript),则必须使用一些更hacky的东西,例如模拟导航的WebBrowser。对于这种情况,下面是一些有用的讨论: (非线程解决方案): C# httpwebrequest and javascript (线程解决方案): WebBrowser Control in a new thread
编辑: 从问题的附加详细信息来看,您似乎正在尝试以编程方式模拟完整的Facebook导航体验。您的兴趣可能是指向结果(例如,来自给定Facebook帐户的未读消息)。在这种情况下,您可能需要寻找一些API解决方案。处理原始HTML与网页交互很少是最好的选择。 祝你好运!