Вопрос

Я создаю приложение, чтобы сделать несколько разных вещей на веб -сайте в разделе «Зарегистрировано в разделе».

Для этого я должен поддерживать один непрерывный сеанс cookie для всех запросов, которые я делаю.

До сих пор я успешно подключился к веб -сайту через httpwebrequest, и ответ подтвердил это, однако я не смог повторно использовать cookie.

Я читал повсюду и нашел темы, которые указывают, как использовать файл cookie в рамках одной и той же функции или класса, но мне нужна возможность использовать файл cookie в разных различных функциях.

Моя первая мысль заключалась в том, чтобы попытаться вернуть контейнер cookie из начальной функции входа в систему, а затем передать его в качестве параметра каждой последующей функции, но я просто не смог этого начать.

Кто -нибудь может предложить либо лучший метод, либо способ, которым я могу сделать это?

Это было полезно?

Решение

В конце концов я сам наткнулся на решение после многих чтения онлайн. Похоже, что причина, по которой это не сработало в первый раз, когда я попробовал, это было из -за других настроек, которые я настроил неправильно.

Так что для тех, кто может столкнуться с той же проблемой, надеюсь, это поможет:

public const string userAgent = "Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1";
public CookieContainer cookieJar;

private void Login_Click(object sender, EventArgs e)
{
    cookieJar = Login();
}

private CookieContainer Login()
{
    string username = txtUsername.Text;
    string password = txtPassword.Text;

    // Create a request using the provied URL. 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(loginPageURL);

    // Set the Method property of the request to POST.
    request.Method = "POST";

    // Set the Cookiecontainer
    CookieContainer cookieJar = new CookieContainer();
    request.CookieContainer = cookieJar;

    // Create POST data and convert it to a byte array.
    string postData = "username=" + username + "&password=" + password;
    byte[] byteArray = Encoding.UTF8.GetBytes (postData);

    // Set the ContentType property of the WebRequest.
    request.ContentType = "application/x-www-form-urlencoded";

    // Set the User Agent
    request.UserAgent = userAgent;

    // Set the ContentLength property of the WebRequest.
    request.ContentLength = byteArray.Length;

    // Get the request stream.
    Stream dataStream = request.GetRequestStream ();

    // Write the data to the request stream.
    dataStream.Write (byteArray, 0, byteArray.Length);

    // Close the Stream object.
    dataStream.Close ();

    // Get the response.
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    // Get the stream containing content returned by the server.
    dataStream = response.GetResponseStream ();

    // Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader (dataStream);

    // Read the content.
    string responseFromServer = reader.ReadToEnd ();

    string cookie = cookieJar.GetCookieHeader(request.RequestUri);

    // Clean up the streams.
    reader.Close();
    dataStream.Close();
    response.Close();

    return cookieJar;
}

private void viewPage(CookieContainer cookieJar, string pageURL)
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pageURL);

    // Set the ContentType property of the WebRequest.
    request.ContentType = "application/x-www-form-urlencoded";

    // Set the Method property of the request to POST.
    request.Method = "POST";

    // Set the User Agent
    request.UserAgent = userAgent;

    // Put session back into CookieContainer
    request.CookieContainer = cookieJar;

    // Get the request stream.
    Stream dataStream = request.GetRequestStream();

    // Close the Stream object.
    dataStream.Close();

    // Get the response.
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    // Get the stream containing content returned by the server.
    dataStream = response.GetResponseStream();

    // Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader(dataStream);

    // Read the content.
    string responseFromServer = reader.ReadToEnd();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top