2

c# を使用して HTTPrequest で Web サイトにログインしたいと考えています。私はすでにグーグルとこのフォーラムで検索しましたが、まだいくつかの問題があります. 私のコードは次のとおりです。

using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms;
using System.Net;
using System.IO;

namespace BodytelConnection
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{

    public MainWindow()
    {
        InitializeComponent();
        webBrowser1.Navigate("http://www.bodytel.com/");
    }


    private void loginBtn_Click(object sender, RoutedEventArgs e)
    {
        string benutzername = textBox_benutzername.ToString();   // used just for test
        string passwort = textBox_passwort.ToString();
        string cookieHeader;
        passwort = changeString(passwort);
        benutzername = changeString(benutzername);

        HttpWebRequest req =                                                          (HttpWebRequest)HttpWebRequest.Create("http://www.bodytel.com/");
        req.UserAgent = "Mozilla/5.0 (Windows NT 6.1;rv:15.0) Gecko/20100101 Firefox/15.0)";
        req.Method = "POST";
        req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        req.Headers.Add("Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3");
        req.Headers.Add("Accept-Encoding: gzip,deflate");
        req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        req.KeepAlive = true;
        req.Headers.Add("Keep-Alive: 300");
        req.Referer = "https://secure.bodytel.com/de/mybodytel.html";
        req.AllowAutoRedirect = true;
        req.ContentType = "application/x-www-form-urlencoded";

        byte[] bytes = Encoding.ASCII.GetBytes("login=hans-neo@web.de%password=xxxxxstep=login");
        req.ContentLength = bytes.Length;
        using (Stream os = req.GetRequestStream())
        {
            os.Write(bytes, 0, bytes.Length);
        }
        WebResponse resp = req.GetResponse();
        cookieHeader = resp.Headers["Set-cookie"];

        webBrowser1.Navigate("https://secure.bodytel.com/de/mybodytel.html");
    }

    private string changeString(string myString)
    {

        myString = myString.Replace("System.Windows.Controls.TextBox: " ,"");
        return myString;
    }


    }

}

Web サイトにログインできず、問題がどこにあるのかわかりません。このサイトにログインするにはどうすればよいですか?

ありがとうございました ;)

4

3 に答える 3

1

問題を解決しました。

コードは次のとおりです。

using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Web;

namespace BodytelConnection{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{

    public MainWindow()
    {
        InitializeComponent();
        webBrowser1.Navigate("http://www.bodytel.com/");
    }

    private void textBox_benutzername_TextChanged(object sender, TextChangedEventArgs e)
    {

    }

    private void textBox_passwort_TextChanged(object sender, TextChangedEventArgs e)
    {

    }

    private void loginBtn_Click(object sender, RoutedEventArgs e)
    {
        string benutzername = textBox_benutzername.ToString();
        string passwort = textBox_passwort.ToString();
        string cookieHeader;
        passwort = changeString(passwort);
        benutzername = changeString(benutzername);

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("https://secure.bodytel.com/de/mybodytel.html");
        CookieContainer cookieContainer = new CookieContainer();
        request.CookieContainer = cookieContainer;

        request.Method = "POST";
        string postData = "login=hans-neo@web.de&password=xxxxx&step=login";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        request.ContentType = "application/x-www-form-urlencoded";
        request.ContentLength = byteArray.Length;
        Stream dataStream = request.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        string Text = "";

        foreach (Cookie cook in response.Cookies)
        {
            Text += "COOKIE: " + cook.Name + " = " + cook.Value + "\r\n";

        }
        request.AllowAutoRedirect = false;
        dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();
        reader.Close();
        dataStream.Close();
        response.Close();

        webBrowser1.Navigate("https://secure.bodytel.com/de/mybodytel.html");
    }

    private string changeString(string myString)
    {

        myString = myString.Replace("System.Windows.Controls.TextBox: ", "");
        return myString;
    }


}

}
于 2012-09-06T06:45:14.090 に答える
1

SSL に問題がなく、実際にサーバーから有効な応答を受け取ったと仮定すると、値を適切にエンコードすることができます。

string loginstr = string.Format("login={0}&password={1}&step=login",
    HttpUtility.UrlEncode("hans-neo@web.de"),
    HttpUtility.UrlEncode("xxxxx"));
byte[] bytes = Encoding.ASCII.GetBytes(loginstr);
于 2012-09-05T10:43:34.397 に答える
0

ログインに間違った URL を使用しているようです。Chrome でログイン フォームを使用して送信される内容を確認すると、次のようになります。

Chrome ネットワークタブ

したがって、「https://secure.bodytel.com/de/mybodytel.html」でログインします。HttpWebRequest がそのように SSL 接続を管理できるかどうかはわかりませんが、WebRequest オブジェクトを作成するときにこのリンクを使用する必要があります。

于 2012-09-05T10:26:35.787 に答える