httpclient模拟Internet c#上用户的导航

时间:2019-04-02 14:22:19

标签: c#

我正在使用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模拟。

你们有什么提示可以帮助我解决这个问题吗?

1 个答案:

答案 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与网页交互很少是最好的选择。 祝你好运!