2012-02-16 2 views
0

Я создаю приложение, чтобы сделать несколько разных вещей на веб-сайте во входе в раздел.Возврат CookieContainer от функции

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

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

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

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

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

+0

Happened после того, как я отправил комментарий. Кроме того, я не скулил, я просто хотел знать, почему этот человек почувствовал, что он заслуживает нисходящего начала. –

ответ

0

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

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

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(); 
} 
Смежные вопросы