Working on RSS Bandit is my
hobby and sometimes I retreat to it when I need to unwind from the
details of work or just need a distraction. This morning was one of
such moments. I decided to look into the issue raised in the thread
from our forums entitled MSN Spaces RSS Feeds Issues - More Info where some of our users complained about a cookie parsing error when subscribed to feeds from MSN Spaces.
Before I explain what the problem is, I'd like to show an example of what an HTTP cookie header looks like from the Wikipedia entry for HTTP cookie
Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.usatoday.com
Note the use of a semicolon as a delimiter for separating cookies.
So it turned out that the error was in the following highlighted line
of code
if (cookieHeaders.Length > 0) {
container.SetCookies(url, cookieHeaders.Replace(";", ","));
}
You'll note that we replace the semicolon delimiters with commas.
Why would we do such a strange thing when the example above shows that
cookies can contain commas? It's because the CookieContainer.SetCookies method in the .NET Framework requires the delimiters to be commas. WTF ?
This seems so fundamentally broken I feel that I must be mistaken. I've
tried searching for possible solutions to the problem online but I
couldn't find anyone else who has had this problem. Am I using the API
incorrectly? Am I supposed to parse the cookie by hand before feeding
it to the method? If so, why would anyone design the API in such a
brain damaged manner?
*sigh*
I was having more fun drafting my specs for work.
Update: Mike Dimmick has pointed out in a comment below that
my understanding of cookie syntax is incorrect. The cookie shown in the
Wikipedia example is one cookie not four as I thought. It looks like
simply grabbing sample code from blogs may not have been a good idea.:) This means that I may have been getting malformed cookies when fetching the MSN Spaces RSS feeds after all. Now if only I can repro the problem...