Tôi đang cố đăng nhập vào API nhà phát triển Yahoo theo chương trình. Tôi đã gặp trở ngại khi tôi không thể truy cập tất cả các tiêu đề "Set-Cookie" của HttpWebResponse.Truy xuất nhiều tiêu đề "Đặt cookie" từ HttpWebResponse
Fiddler cho tôi thấy các cookie sau trong phần đầu của câu trả lời:
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
Tuy nhiên, tôi không thể truy cập bất cứ điều gì ngoài trường hợp đầu tiên của "Set-Cookie" qua 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")));
debug My lợi nhuận đầu ra:
Set-Cookie: B=733jjvp7f5g8f&b=3&s=b1; expires=Sun, 22-Dec-2013 05:33:03 GMT; path=/; domain=.yahoo.com
Điều thú vị là, nếu tôi thực hiện một yêu cầu tương tự như Anh aders.GetValues, nó thực sự trả về hai trường hợp của "Set-Cookie" tiêu đề, mà dường như đã được nối với nhau trên:
foreach (var headerName in response.Headers.AllKeys)
{
foreach (var values in response.Headers.GetValues(headerName))
{
Debug.WriteLine("{0}: {1}", headerName, values);
}
}
Output:
Set-Cookie: B=733jjvp7f5g8f&b=3&s=b1; expires=Sun
Set-Cookie: 22-Dec-2013 05:33:03 GMT; path=/; domain=.yahoo.com
Tôi đã nhìn thấy một vài khác các câu hỏi xác nhận tiêu đề thô không có sẵn thông qua đối tượng HttpWebResponse và tôi nên điều tra bằng cách sử dụng giải pháp ổ cắm. Tôi sắp kiểm tra FiddlerCore để xem tôi có may mắn không, nhưng nếu có bất cứ người nào khác, tôi rất muốn gặp họ.
Cảm ơn!
Chúc mừng @ M.Babcock. Lời khuyên này đã dẫn tôi xem lại các đối tượng yêu cầu/trả lời. Hóa ra tôi đã nhận được 302 phản hồi chuyển hướng tự động trước phản hồi 200 mà tôi đã xem lúc đầu. Các tập tin cookie đã được trên 302 phản ứng đầu tiên, nhưng không phải trên phản ứng cuối cùng, đó là lý do tại sao tôi đã không nhìn thấy chúng trước đây. Thiết lập "AllowAutoRedirect = false" trên yêu cầu ban đầu đã làm mẹo để tôi có thể xử lý các cookie trên phản hồi 302 đúng cách. – Dakkith
@Dakkith - Bạn có thể xử lý chuyển hướng thủ công bằng cách đặt thuộc tính 'AllowAutoRedirect' thành false trên đối tượng HttpWebRequest của bạn, kiểm tra mã Trạng thái của phản hồi và nếu đó là chuyển hướng, hãy gửi lại yêu cầu ban đầu của bạn đến địa chỉ được chỉ định bởi tiêu đề 'location' của phản hồi. –