पर HttpWebRequests के बीच कुकी कोंटेनर साझा करने में समस्याएं मेरे पास एक उत्पादन ऐप है जो HttpWebRequest के माध्यम से दो कॉल करता है। पहला कॉल सत्र सेट करता है और सत्र को बनाए रखने के लिए कुकीज़ वापस प्राप्त करता है, दूसरा कॉल एपीआई से डेटा के लिए होता है। प्रतिक्रिया httponly हैं। मैं दो कॉल के बीच साझा कुकी कंटनर का उपयोग कर रहा हूं, लेकिन दूसरा कॉल हमेशा विफल रहता है। मैंने दूसरी अनुरोध में भेजे जा रहे कुकीज़ को समस्या को कम कर दिया। मैंने यातायात देखने के लिए नेटवर्क मॉनीटर का उपयोग किया है, और यदि मैं स्पष्ट रूप से दूसरे अनुरोध में कुकीज़ सेट करता हूं (नीचे कोड देखें), कॉल सफल होता है। इस मुद्दे पर किसी के पास कोई विचार है? मुझे यह समझने की ज़रूरत है कि साझा कुकी कंटनर के साथ काम करने के लिए इसे कैसे प्राप्त किया जाए।विंडोज फोन 7 (आम)
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
}
}
}
}
}
}
मुझे इस कोड की कोशिश करते हैं, मैं एक त्रुटि है कि कहते हैं, "foreach बयान के प्रकार 'System.Net.CookieContainer' चर पर काम नहीं कर सकते क्योंकि 'System.Net.CookieContainer' एक सार्वजनिक परिभाषा शामिल नहीं है मिल 'GetEnumerator' के लिए। क्या आप इसका उपयोग करने में सक्षम थे? धन्यवाद। –
@JeffParies इसके बारे में क्षमा करें, कंप्यूटर से दूर था और कोड में सत्यापित नहीं हो सका। मैंने जवाब अपडेट किया है। –
धन्यवाद, मैं देखूंगा अगर मैं इसे कार्यान्वित कर सकता हूं ... क्या यह httponly कुकीज़ पर काम करता है? –