0
認証が必要なサイトからデータを取得するプログラムを作っています。私はコンソールでプログラムを作っているので、コントロールを使うことはできません。Webリクエストによる認証を覚えている
ログインフォームにユーザーデータを送信し、ウェルカム画面の情報を取得できました。しかし、別のリクエストを送信すると、私はログインしたことを忘れてしまいました。 私は何とかクッキーを有効にしなければならなかったが、私はまだそれを働かせていません。
これは私のコードです:
public string GetResponse()
{
// Build a string containing all the parameters
string Parameters = string.Empty;
foreach (string p in theQueryData)
{
Parameters += string.Format("&{0}", p);
}
if (Parameters.Length > 0)
Parameters = Parameters.Substring(1);
// Create a request using a URL that can receive a post.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(this.url);
// Set the Method property of the request to POST.
request.Method = this.method;
// Create POST data and convert it to a byte array.
string postData = Parameters;
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded";
// 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.
WebResponse response = 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();
// Clean up the streams.
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
は、これらの要求リターンヘッダです:
Connection: keep-alive
Vary: Accept-Encoding
Content-Length: 7628
Cache-Control: private
Content-Type: text/html
Date: Tue, 06 Dec 2011 20:58:21 GMT
Set-Cookie: plaza%5Fmasteraccount=; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,plaza%5Fvacmode=R; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; pa
th=/,plaza%5Fname=%16%05%0C%0E%15%09%18%21QRQ; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,plaza%5Flocked=R; expires=Tue, 06-Dec-2011 23:00:00 GMT; d
omain=; path=/,plaza%5Flogin=%16%05%0C%0E%15%09%18%21QRQ; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,plaza%5Fid=S%5ENWNSQPP%40%15%08%0C%0E%15%09%18%
21QRQ%15%08%0C%0E%15%09%18%21QRQRQQ; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,plaza%5Fmid=1323205117; expires=Sun, 25-Nov-2012 23:00:00 GMT; path=
/,plaza%5Fstatus=Q; expires=Tue, 06-Dec-2011 23:00:00 GMT; domain=; path=/,ASPSESSIONIDSQCRSDDR=NKHJIBADOGALNGKDBALDJBIA; path=/
Server: nginx
X-Powered-By: ASP.NET
レスポンスヘッダーのクッキーを読み取って保存し、その後のリクエストで送信する必要があります。 –
これに完全な答えを出すには、実際には十分ではありません。あなたが本当に必要とするのは、後続のリクエストで応答に返されるCookieコレクションを含めることです。しかし、私は、このコードに基づいて、そのクッキーの形式または内容がどのようなものであるべきかを知りません。 –
質問にhttpヘッダーを追加しました。 – Jerodev