Я пытаюсь программно войти в API разработчика Yahoo. Я столкнулся с камнем преткновения, когда не могу получить доступ ко всем заголовкам «Set-Cookie» HttpWebResponse.
Fiddler показывает мне следующие файлы cookie в заголовке ответа:
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.com
Set-Cookie: F=a=GYsABKAMvTZoTcNAPKUXrclX_Hb77EA7I_62nONz8QeEwNevHwqJ_NyizED88uhv9aMx.9o-&b=3tN5; expires=Sun, 22-Dec-2013 05:33:04 GMT; path=/; domain=.yahoo.com
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.com
Set-Cookie: PH=fn=jW23i4lnq1UpiP.lsuU-&l=en-AU; expires=Sun, 22-Dec-2013 05:33:04 GMT; path=/; domain=.yahoo.com
Set-Cookie: T=z=QEs8OBQYTBPBEZq31nTCqv1MzNPBjUwTjcwMDZOTjY-&a=YAE&sk=DAAtoxgrYmWIMk&ks=EAA3Ha0H7qyCT8P3cI9NWJrIA--~E&d=c2wBTkRRNEFUSTNPVEEzTnpFNU9URS0BYQFZQUUBZwFCRFZQTkRSSjJQRVRDTEdFT0xCQ1hER0VVUQFvawFaVzAtAXRpcAF2MkNUVUEBenoBUUVzOE9CQTdF; path=/; domain=.yahoo.com
Set-Cookie: SSL=v=1&s=kTc532PQYAe1iT.23Q55E50ZdoOAdEK_fshc3g_YZ3SxszcbuHkmpJUAQ7RT67nDNA0nXyX68um90ZuS9RQztQ--&kv=0; path=/; domain=.yahoo.com; secure; httponly
Однако я не могу получить доступ к чему-либо кроме первого экземпляра «Set-Cookie» через .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.com
Интересно, что если я сделаю аналогичный запрос к Headers.GetValues, он на самом деле вернет два экземпляра заголовка "Set-Cookie", которые, как представляется, были объединены вместе выше:
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.com
Я видел несколько других вопросов, которые подтверждают, что необработанные заголовки не доступны через объект HttpWebResponse, и я должен исследовать, используя решение с сокетами. Я собираюсь проверить FiddlerCore, чтобы узнать, повезет ли мне с этим, но если у кого-то есть другие указатели, я бы хотел их увидеть.
Спасибо!