HttpWebRequest를 통해 두 번 전화를 거는 프로덕션 응용 프로그램이 있습니다. 첫 번째 호출은 세션을 설정하고 세션을 유지하기 위해 쿠키를 수신하고, 두 번째 호출은 API의 데이터를위한 것입니다. 응답은 httponly입니다. 두 통화 사이에 공유 CookieContainer를 사용하고 있지만 두 번째 호출은 항상 실패합니다. 나는 두 번째 요청에서 보내지 않은 쿠키로 문제를 좁혔다. 나는 네트워크 모니터를 사용하여 트래픽을 보았고 두 번째 요청에서 쿠키를 명시 적으로 설정하면 (아래 코드 참조) 호출이 성공합니다. 누구든지이 문제에 대한 아이디어가 있습니까? 공유 CookieContainer와 함께 작동시키는 방법을 찾아야합니다.Windows Phone 7 (Mango)에서 HttpWebRequests간에 CookieContainer를 공유하는 데 문제가 있습니다.
private string URL_01 = "https:// [...]";
private string URL_02 = "https:// [...]";
private CookieContainer _cookieContainer = new CookieContainer();
private NetworkCredential nc = new NetworkCredential("username", "password");
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
HttpWebRequest request = HttpWebRequest.CreateHttp(URL_01);
request.CookieContainer = _cookieContainer;
request.Credentials = nc;
request.UseDefaultCredentials = false;
request.BeginGetResponse(new AsyncCallback(HandleResponse), request);
}
public void HandleResponse(IAsyncResult result)
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;
if (request != null)
{
using (WebResponse response = request.EndGetResponse(result))
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
string data = reader.ReadToEnd();
// gets returned data and deserializes it to an object
SessionObject so = JsonConvert.DeserializeObject<SessionObject>(data);
if (so.DeviceAPI.Session == "true")
{
// make a second call for the data
HttpWebRequest requestData = HttpWebRequest.CreateHttp(URL_02);
// when this is used, the call fails
requestData.CookieContainer = _cookieContainer;
// when this is used, the call works
//requestData.Headers[HttpRequestHeader.Cookie] = "_key=value; _secret=value";
requestData.Credentials = nc;
requestData.BeginGetResponse(new AsyncCallback(DataResponse), requestSongData);
}
}
}
}
}
public void DataResponse(IAsyncResult DataResult)
{
HttpWebRequest requestData = DataResult.AsyncState as HttpWebRequest;
if (requestData != null)
{
using (WebResponse dataResponse = requestData.EndGetResponse(DataResult))
{
using (StreamReader reader = new StreamReader(dataResponse.GetResponseStream()))
{
string data = reader.ReadToEnd();
// do something with the data
}
}
}
}
}
}
이 코드를하려고 할 때, 나는 'System.Net.CookieContainer가'공공의 정의가 포함되어 있지 않기 때문에 foreach 문은 'System.Net.CookieContainer'유형의 변수에 작동 할 수 없습니다 "라는 오류가 –
@JeffParies 죄송합니다. 컴퓨터에서 떨어져 코드에서 확인할 수 없습니다. 답변을 업데이트했습니다. –
감사합니다. 내가 볼 것입니다. 'GetEnumerator'에 대한 답변입니다. 이 기능을 구현할 수 있다면 ... httponly 쿠키에서 작동합니까? –