내 생각에 잘못하면 나를 수정하십시오.WebClient를 사용하여 쿠키를받을 수 없습니다.
아시다시피 새로운 WebClient 클래스 인스턴스는 새 세션을 시작하여 새 세션 ID를 생성합니다.
이 문제를 방지하려면 첫 번째 사용에서 세션 ID를받은 다음 WebClient의 모든 새 인스턴스에 전달해야합니다. 이
이론적으로 (들어 방법은 다른 모든 매개 변수로 요청에 추가 할 수 있습니다 "GET"), 다음과 같이 클래스를 사용하여 수행 할 수 있습니다
public class ExtendedWebClient : WebClient
{
public CookieContainer CookieContainer { get; private set; }
[SecuritySafeCritical]
public ExtendedWebClient()
{
this.CookieContainer = new CookieContainer();
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
(request as HttpWebRequest).CookieContainer = this.CookieContainer;
return request;
}
}
그러나 그것이 작동하지 않습니다 jsessionid 쿠키를 사용하는 경우이 방법에는 두 가지 문제점이 있습니다.
- 저장된 CookieContainer에서 jsessionid 값을 볼 수 없습니다. 나는 아래처럼 다른 접근 방법을 사용하여이 값을 수신 한 다음 = someValue와, 도움이되지 않습니다 & JSESSIONID로 reqeust의 URI에이 값을 추가 할 것입니다 경우에도
- .
Windows Phone에서 이러한 요청을 여러 번 확인했는데 응답이 독특하고 고유 한 jsessionid입니다.
그러나 브라우저에서 이러한 요청을 작성하면 응답은 올바른 jsessionid와 함께 반환됩니다.
는다음 코드는 윈도우 폰의 응답 (사용 HttpWebRequest를 대신 웹 클라이언트의)에서 JSESSIONID 값을받을 수 있습니다,하지만 문제가 해결되지 않습니다
// working with some uri
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.CookieContainer = new CookieContainer();
request.BeginGetResponse(asynchronousResult =>
{
try
{
using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult))
{
CookieCollection cookies = response.Cookies;
foreach (Cookie c in cookies)
{
if (c.Name == "JSESSIONID")
// jsessionid value is here. Can be saved & stored somewhere
}
response.Close();
}
catch (Exception e)
{
// handling exception somehow
}
}
, request);
POST를 사용할 때 실제로 컨테이너를로드하는 것을 보았습니까? 아니면이 가정입니까? –
업데이트 된 질문입니다. 문제는 분명히 GET 방법이 아닙니다. jsessionid 값을받는 방법을 찾았지만 응용 프로그램을 단일 세션에서 강제로 실행할 수 없습니다. 이견있는 사람? – Olter