0

C# コードのどこに Cookie を設定するコードを配置する必要がありますか? システムにログインすると、Firefox に 3 つの Cookie が表示されます。

ログインページ

system.local/interface/Login.php

POST /interface/Login.php HTTP/1.1
Host: system.local
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://system.local/interface/Login.php
Cookie: language=en_US.UTF-8; StationID=06ae3ed4d72a33dd951572df84a13725
Content-Type: application/x-www-form-urlencoded
Content-Length: 71
user_name=user&password=password123456&language=en&action%3Asubmit=Submit

ログイン時の index.php からの GET レスポンス

http://system.local/interface/index.php

GET /interface/index.php HTTP/1.1
Host: system.local
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: system.local/interface/Login.php  
Cookie: language=en_US.UTF-8; StationID=06ae3ed4d72a33dd951572df84a13725; SessionID=3783a8fea972fb99779f7dd3078ed53c

このコードのどこに Cookie を配置しますか?

string url;
string cookieHeader;
string formparam;
HttpWebRequest request;
HttpWebResponse response;
byte[] bytes;

url = "http://system.local/interface/Login.php";
formparam = string.Format("user_name=" + textBox1.Text + "&password=" + textBox2.Text + "&language=en&action%3Asubmit=Submit");
request = (HttpWebRequest)HttpWebRequest.Create(url);
var cookies = new CookieContainer();
request.ContentType = "Content-Type: application/x-www-form-urlencoded";
request.Method = "POST";
bytes = Encoding.ASCII.GetBytes(formparam);
request.ContentLength = bytes.Length;
request.KeepAlive = true;

using (Stream os = request.GetRequestStream())
{
    os.Write(bytes, 0, bytes.Length);
}

response = (HttpWebResponse)request.GetResponse();
cookieHeader = response.Headers["Set-Cookie"];


request = (HttpWebRequest)WebRequest.Create("http://system.local/interface/Login.php");
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(response.Cookies);
request.Headers.Add("Cookie", cookieHeader);

response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    //richTextBox1.Text = reader.ReadToEnd().Trim();
}
4

2 に答える 2

1

CookieContainerevery にフィールドを設定するrequestと、ヘッダーから Cookie が自動的に追加されます。CookieContainer毎回同じインスタンスを使用すると、複数のリクエストにわたってその状態が維持されます。リクエスト Cookie コンテナーに割り当てられている場合は自動的に処理されるためCookieset-cookieヘッダー値をいじる必要はありません。CookieContainer

var cookies = new CookieContainer();

request.CookieContainer = cookies;
...
response = (HttpWebResponse)request.GetResponse();
// no need to manually read Cookie header, CookieContainer handles that.

request = ...
request.CookieContainer = cookies;
// no need to manually set/populate CookieContainer, just use the same instance.
...
response = (HttpWebResponse)request.GetResponse();
// etc
于 2012-07-31T13:00:54.830 に答える
0

私は今私の問題を解決しました。
私はそれを新しく書いたばかりで、奇妙に動作します。

于 2012-08-01T09:17:01.027 に答える