HttpWebRequest Coockies auslesen
Hi leute,
ich versuche wie das thema schon sagt cookies bei einem web request auszulesen. Leider gelingt mir das bisher nicht.
Code:
try
{
HttpWebRequest webRequest = (HttpWebRequest)result.AsyncState;
//webRequest.CookieContainer.Count == 2
using (HttpWebResponse response = (HttpWebResponse)webRequest.EndGetResponse(result))
{
//response.Cookies.Count == 0
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
Response = streamReader.ReadToEnd();
streamReader.Close();
response.Close();
}
}
if (this.GetResponse != null)
this.GetResponse(this, new EventArgs());
}
catch (Exception ex)
{
}
Die Coockies stehen nur im webRequest zur verfügung, beim response ist Coockies leer. Warum ist das so? Und wie kann ich die Coockies direckt aus dem webRequest auslesen? Über die .GetCoockie() methode muss man eine Uri angeben ... aber kann man nicht einfach alle auslesen?
AW: HttpWebRequest Coockies auslesen
AW: HttpWebRequest Coockies auslesen
Was passiert wenn du es so wie in der Antwort hier machst: http://stackoverflow.com/questions/5...ttpwebresponse
Also einen eigenen Cookie-Container anlegst und an den Request übergibst bevor du in absendest?
AW: HttpWebRequest Coockies auslesen
Das mach ich bereits. Wenn ich das nicht machen würde, wäre webRequest.CookieContainer == null
AW: HttpWebRequest Coockies auslesen
hier mal der ganze request ... vieleicht kann man ja da was erkennen
Code:
public void SubmitAction(string url)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.CookieContainer = new CookieContainer();
//request.AllowAutoRedirect = false;
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
}
catch (Exception e)
{ }
}
private void GetRequestStreamCallback(IAsyncResult asyncResult)
{
string json = RequestData.Stringify();
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
try
{
using (Stream postStream = request.EndGetRequestStream(asyncResult))
{
StringBuilder postData = new StringBuilder();
postData.Append("app=" + json);
postData.Append("&crc=" + CreateChecksum(json));
byte[] postDataByteArray = Encoding.UTF8.GetBytes(postData.ToString());
postStream.Write(postDataByteArray, 0, postData.Length);
postStream.Close();
}
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
catch (Exception ex)
{
}
}
private void GetResponseCallback(IAsyncResult result)
{
try
{
HttpWebRequest webRequest = (HttpWebRequest)result.AsyncState;
//webRequest.CookieContainer.Count == 2
using (HttpWebResponse response = (HttpWebResponse)webRequest.EndGetResponse(result))
{
//response.Cookies == 0
using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
{
Response = streamReader.ReadToEnd();
streamReader.Close();
response.Close();
}
}
if (this.GetResponse != null)
this.GetResponse(this, new EventArgs());
}
catch (Exception ex)
{
}
}
AW: HttpWebRequest Coockies auslesen
HttpWebRequest ist uralt. Und dein Code voller boilerplate.
Benutze doch eine moderne Klasse für solche Request.
http://msdn.microsoft.com/de-de/libr...v=vs.118).aspx (Gibt es über Nuget für WP8)
Hier ist ein Beispiel wie man an die Cookies kommt http://stackoverflow.com/a/13318204 (nicht so schön, da .Result statt await verwendet wird, aber egal)
AW: HttpWebRequest Coockies auslesen
Ich wusste nich das die Uralt ist ... das steht ja auch nirgends ^^
Aber danke weiss ich bescheid :)
nur leider will das auch nich so ganz klappen :/
Code:
CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
//handler.AllowAutoRedirect = false;
HttpClient httpClient = new HttpClient(handler)
{
BaseAddress = mainUri,
Timeout = TimeSpan.FromSeconds(5)
};
try
{
HttpResponseMessage response = await httpClient.PostAsync(subUrl, content);
using (HttpContent responseContent = response.Content)
{
string result = await responseContent.ReadAsStringAsync();
if (!String.IsNullOrEmpty(result))
{
Response = result;
IEnumerable<Cookie> responseCookies = cookies.GetCookies(new Uri("...")).Cast<Cookie>();
foreach (Cookie cookie in responseCookies)
{
}
}
}
}
responseCookies bleibt auch hier Leer ... cookies jedoch hat seiner 2 Cookies
AW: HttpWebRequest Coockies auslesen
Zitat:
Zitat von
Coooder
cookies jedoch hat seiner 2 Cookies
Meinst du damit, das cookies.Count 2 liefert?
Vielleicht mainUri + subUrl != new Uri("...") ?
Am besten du baust dir die Uri einmal selber, lässt BaseAddress weg, übergibst die volle Uri im Post() und auch in GetCookies().
AW: HttpWebRequest Coockies auslesen
Ja genau cookies.Count == 2
Jo die sind gleich, habs aber dennoch mal deine variante ausprobiert ... leider das gleiche resultat :(