我尝试使用amazon.com类登录C# HTTPWebRequest,我可以登录,但无法读取标题中的多个set-cookie。
当服务器使用多个"Set-Cookie:"-headers进行响应时,只有第一个在头中可用。
Web响应在HTTPWebRequest中的应用
Set-Cookie: x-main=Yvi4723B?Nk5zuPPCZ0?66eGEI5kVnOM; path=/; domain=.amazon.com;
expires=Wed May 25 13:20:05 2011 GMT如何在头文件中使用HTTPWebRequest类获得所有"Set-Cookie:“??
Header中的HTTP响应
Set-Cookie: x-main=Yvi4723B?Nk5zuPPCZ0?66eGEI5kVnOM; path=/; domain=.amazon.com;
expires=Wed May 25 13:20:05 2011 GMT
Set-Cookie:atmain=4|WzNBbofyvkTvUaivgd9aS0Tzy0V2MJoUy+gJVcZ4szMhpt+gEyrRyLfUEodtZBKdn9vyJQJ3szoLgO12SUrB5XYqJ/tggOPurUepz5qsd6eg2V6vfbE0X1HQKp03xVkYLPEH5MDhmkMevQgkv36FyY+zA6HN5LzlM92+4kGu6wHeIILZ5+y/dtoYU/uORs1hC9hEo5iwP8Mljg4hDx7b/g==; path=/; domain=.amazon.com; expires=Wed May 25 13:20:05 2011 GMT; secure
Set-Cookie: ubid-main=182-3549292-6045052; path=/; domain=.amazon.com; expires=Wed May 25 13:20:05 2011 GMT我期待着你的答复,
提前谢谢.
发布于 2011-05-23 07:12:50
我认为您的意思是在HttpWebResponse对象中获取Set-Cookie头部;如果是,那么您可以使用GetValues方法来获取Set-Cookie头的所有实例。
public class StackOverflow_6045579_751090
{
static AutoResetEvent serverStarted = new AutoResetEvent(false);
public static void Test()
{
new Thread(new ThreadStart(StartServer)).Start();
serverStarted.WaitOne();
SendRequest();
}
static void StartServer()
{
TcpListener serverSocket = new TcpListener(8000);
TcpClient clientSocket = null;
serverSocket.Start();
serverStarted.Set();
clientSocket = serverSocket.AcceptTcpClient();
var clientStream = clientSocket.GetStream();
byte[] bytesFrom = new byte[10025];
int bytesRead = clientStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
string dataFromClient = Encoding.UTF8.GetString(bytesFrom, 0, bytesRead);
Console.WriteLine(" >> Data from client - " + dataFromClient);
string serverResponse = @"HTTP/1.1 200 OK
Content-Length: 0
Set-Cookie: x-main=Yvi4723B?Nk5zuPPCZ0?66eGEI5kVnOM; path=/; domain=.amazon.com; expires=Wed May 25 13:20:05 2011 GMT
Set-Cookie:atmain=4|WzNBbofyvkTvUaivgd9aS0Tzy0V2MJoUy+gJVcZ4szMhpt+gEyrRyLfUEodtZBKdn9vyJQJ3szoLgO12SUrB5XYqJ/tggOPurUepz5qsd6eg2V6vfbE0X1HQKp03xVkYLPEH5MDhmkMevQgkv36FyY+zA6HN5LzlM92+4kGu6wHeIILZ5+y/dtoYU/uORs1hC9hEo5iwP8Mljg4hDx7b/g==; path=/; domain=.amazon.com; expires=Wed May 25 13:20:05 2011 GMT; secure
Set-Cookie: ubid-main=182-3549292-6045052; path=/; domain=.amazon.com; expires=Wed May 25 13:20:05 2011 GMT
Connection: close
Date: Mon, 23 May 2011 06:56:18 GMT
";
Byte[] sendBytes = Encoding.UTF8.GetBytes(serverResponse);
clientStream.Write(sendBytes, 0, sendBytes.Length);
clientStream.Flush();
clientStream.Close();
clientSocket.Close();
}
public static void SendRequest()
{
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://" + Environment.MachineName + ":8000/foo");
req.Method = "GET";
HttpWebResponse resp;
try
{
resp = (HttpWebResponse)req.GetResponse();
}
catch (WebException e)
{
resp = (HttpWebResponse)e.Response;
}
if (resp != null)
{
Console.WriteLine("HTTP/{0} {1} {2}", resp.ProtocolVersion, (int)resp.StatusCode, resp.StatusDescription);
foreach (var headerName in resp.Headers.AllKeys)
{
foreach (var values in resp.Headers.GetValues(headerName))
{
Console.WriteLine("{0}: {1}", headerName, values);
}
}
}
}
}https://stackoverflow.com/questions/6045579
复制相似问题