检索多个"Set

编程入门 行业动态 更新时间:2024-10-26 16:32:47
本文介绍了检索多个"Set-Cookie".HttpWebResponse的标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试以编程方式登录Yahoo开发人员API.我遇到了一个绊脚石,在这里我无法访问HttpWebResponse的所有"Set-Cookie"标头.

I'm attempting to programmatically log in to the Yahoo developer API. I've hit a stumbling block where I can't access all of the "Set-Cookie" headers of a HttpWebResponse.

Fiddler在响应的标题中向我显示了以下cookie:

Fiddler shows me the following cookies in the header of the response:

Set-Cookie: B=733jjvp7f5g8f&b=4&d=1pFN8bVpYFYaPUme88.fc6ZzTSI-&s=kc&i=.1p3Ei3yvwqZjo0gcg7D; expires=Sun, 22-Dec-2013 05:33:04 GMT; path=/; domain=.yahoo Set-Cookie: F=a=GYsABKAMvTZoTcNAPKUXrclX_Hb77EA7I_62nONz8QeEwNevHwqJ_NyizED88uhv9aMx.9o-&b=3tN5; expires=Sun, 22-Dec-2013 05:33:04 GMT; path=/; domain=.yahoo Set-Cookie: Y=v=1&n=0v251rt3ifppb&l=0kii84if0h70ma/o&p=m2fvvau012000000&iz=1111&r=if&lg=en-AU&intl=au&np=1; path=/; domain=.yahoo Set-Cookie: PH=fn=jW23i4lnq1UpiP.lsuU-&l=en-AU; expires=Sun, 22-Dec-2013 05:33:04 GMT; path=/; domain=.yahoo Set-Cookie: T=z=QEs8OBQYTBPBEZq31nTCqv1MzNPBjUwTjcwMDZOTjY-&a=YAE&sk=DAAtoxgrYmWIMk&ks=EAA3Ha0H7qyCT8P3cI9NWJrIA--~E&d=c2wBTkRRNEFUSTNPVEEzTnpFNU9URS0BYQFZQUUBZwFCRFZQTkRSSjJQRVRDTEdFT0xCQ1hER0VVUQFvawFaVzAtAXRpcAF2MkNUVUEBenoBUUVzOE9CQTdF; path=/; domain=.yahoo Set-Cookie: SSL=v=1&s=kTc532PQYAe1iT.23Q55E50ZdoOAdEK_fshc3g_YZ3SxszcbuHkmpJUAQ7RT67nDNA0nXyX68um90ZuS9RQztQ--&kv=0; path=/; domain=.yahoo; secure; httponly

但是,我无法通过.NET访问除"Set-Cookie"的第一个实例之外的任何内容:

However, I'm unable to access anything beyond the first instance of "Set-Cookie" via .NET:

// Make the web request: var userAuthWebRequest = WebRequest.Create(uri) as HttpWebRequest; var response = userAuthWebRequest.GetResponse() as HttpWebResponse; // Dump the headers to debug: Debug.WriteLine(string.Format("Set-Cookie: {0}", response.Headers.Get("Set-Cookie")));

我的调试输出返回:

Set-Cookie: B=733jjvp7f5g8f&b=3&s=b1; expires=Sun, 22-Dec-2013 05:33:03 GMT; path=/; domain=.yahoo

有趣的是,如果我对Headers.GetValues进行类似的请求,它实际上会返回"Set-Cookie"标头的两个实例,这些实例似乎在上面串联在一起:

Interestingly, if I make a similar request to Headers.GetValues, it actually returns two instances of the "Set-Cookie" header, which appear to have been concatenated together above:

foreach (var headerName in response.Headers.AllKeys) { foreach (var values in response.Headers.GetValues(headerName)) { Debug.WriteLine("{0}: {1}", headerName, values); } }

输出:

Set-Cookie: B=733jjvp7f5g8f&b=3&s=b1; expires=Sun Set-Cookie: 22-Dec-2013 05:33:03 GMT; path=/; domain=.yahoo

我还看到了其他一些问题,这些问题可以通过HttpWebResponse对象确认原始标头不可用,我应该使用套接字解决方案进行调查.我将要检查FiddlerCore,以查看是否有运气,但是如果有人有其他指针,我很乐意看到它们.

I've seen a few other questions that confirm the raw headers aren't available via the HttpWebResponse object, and I should investigate using a sockets solution. I'm about to check out FiddlerCore to see if I have any luck with that, but if anyone has any other pointers I'd love to see them.

谢谢!

推荐答案

您通常需要使用'CookieCollection'类,用于解析和处理set-cookie标头.

You'll typically want to use the 'CookieCollection' class to handle parsing and handling the set-cookie headers.

有关如何实现它的帮助,请从MSDN中查看示例( HttpWebRequest.CookieContainer ):

For help on how to implement it check out the example from MSDN (HttpWebRequest.CookieContainer):

using System.Net; using System; namespace Examples.System.Net.Cookies { // This example is run at the command line. // Specify one argument: the name of the host to // send the request to. // If the request is sucessful, the example displays the contents of the cookies // returned by the host. public class CookieExample { public static void Main(string[] args) { if (args == null || args.Length != 1) { Console.WriteLine("Specify the URL to receive the request."); Environment.Exit(1); } HttpWebRequest request = (HttpWebRequest)WebRequest.Create(args[0]); request.CookieContainer = new CookieContainer(); HttpWebResponse response = (HttpWebResponse) request.GetResponse(); // Print the properties of each cookie. foreach (Cookie cook in response.Cookies) { Console.WriteLine("Cookie:"); Console.WriteLine("{0} = {1}", cook.Name, cook.Value); Console.WriteLine("Domain: {0}", cook.Domain); Console.WriteLine("Path: {0}", cook.Path); Console.WriteLine("Port: {0}", cook.Port); Console.WriteLine("Secure: {0}", cook.Secure); Console.WriteLine("When issued: {0}", cook.TimeStamp); Console.WriteLine("Expires: {0} (expired? {1})", cook.Expires, cook.Expired); Console.WriteLine("Don't save: {0}", cook.Discard); Console.WriteLine("Comment: {0}", cook.Comment); Console.WriteLine("Uri for comments: {0}", cook.CommentUri); Console.WriteLine("Version: RFC {0}" , cook.Version == 1 ? "2109" : "2965"); // Show the string representation of the cookie. Console.WriteLine ("String: {0}", cook.ToString()); } } } }

更多推荐

检索多个"Set

本文发布于:2023-10-29 10:35:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1539460.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   quot   Set

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!