Отправьте веб-форму и получите данные ответа в C # - PullRequest
2 голосов
/ 25 июля 2011

Я пытаюсь написать приложение на C #, которое может автоматически отправлять идентификатор пользователя, пароль и логин (отправить кнопку «Войти») на веб-сайт (пример http://abc.com)) и получать данные, возвращаемые в Httprequest.Я делаю это? Я застрял ... Спасибо за любые ваши рекомендации!: D

1 Ответ

2 голосов
/ 25 июля 2011

Я использую эти функции ...
С первой вы можете передать массив с именем параметра и значением параметра, со второй вы можете передать всю строку.
Имейте в виду, что это работает (возвращает HTML-страницучто вы можете анализировать, как вам угодно), если POST выполняется без кода JavaScript раньше ... так что внимательно посмотрите на источник веб-страницы.

public static string HttpPost(string url, object[] postData, string saveTo = "")
{
    StringBuilder post = new StringBuilder();
    for (int i = 0; i < postData.Length; i += 2)
        post.Append(string.Format("{0}{1}={2}", i == 0 ? "" : "&", postData[i], postData[i + 1]));
    return HttpPost(url, post.ToString(), saveTo);
}
public static string HttpPost(string url, string postData, string saveTo = "")
{
    postData = postData.Replace("\r\n", "");
    try
    {
        WebRequest req = WebRequest.Create(url);
        byte[] send = Encoding.Default.GetBytes(postData);
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        //req.ContentType = "text/xml;charset=\"utf-8\"";
        req.ContentLength = send.Length;

        Stream sout = req.GetRequestStream();
        sout.Write(send, 0, send.Length);
        sout.Flush();
        sout.Close();

        WebResponse res = req.GetResponse();
        StreamReader sr = new StreamReader(res.GetResponseStream());
        string returnvalue = sr.ReadToEnd();
        if (!string.IsNullOrEmpty(saveTo))
            File.WriteAllText(saveTo, returnvalue);

        //Debug.WriteLine("{0}\n{1}", postData, returnvalue);
        return returnvalue;
    }
    catch (Exception ex)
    {
        Debug.WriteLine("POST Error on {0}\n  {1}", url, ex.Message);
        return "";
    }
}
...