2017-08-09 69 views
-1

我可以成功登录,但登录后似乎无法成功调用其他方法。我在网上搜索我需要保持HTTP会话之间的通话,但我已经做到了,仍然无法正常工作。你可以看看下面的示例代码,看看还有什么缺失?谢谢。登录后维护HTTP会话

端点:HTTP:// “我的域”/帐号/登录

方法:GET

参数:用户名,密码

我似乎无法登录后请求的URL下,当成功调用成功上面网址:

端点:HTTP:// “我的域名”/原料药/游戏

Parmaters:无

public string MakeRequest(string parameters) 
    { 
     CookieContainer cookie = new CookieContainer(); 

     string URL = EndPoint + parameters; 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); 

     request.CookieContainer = cookie; 

     request.Method = Method.ToString(); 
     request.ContentLength = 0; 
     request.ContentType = ContentType; 

     if (!string.IsNullOrEmpty(PostData) && Method == HttpVerb.POST) 
     { 
      var encoding = new UTF8Encoding(); 
      var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(PostData); 
      request.ContentLength = bytes.Length; 

      using (var writeStream = request.GetRequestStream()) 
      { 
       writeStream.Write(bytes, 0, bytes.Length); 
      } 
     } 

     using (var response = (HttpWebResponse)request.GetResponse()) 
     { 
      var responseValue = string.Empty; 

      if (response.StatusCode != HttpStatusCode.OK) 
      { 
       var message = String.Format("Request failed. Received HTTP {0}", response.StatusCode); 
       throw new ApplicationException(message); 
      } 

      // grab the response 
      using (var responseStream = response.GetResponseStream()) 
      { 
       if (responseStream != null) 
        using (var reader = new StreamReader(responseStream)) 
        { 
         responseValue = reader.ReadToEnd(); 
        } 
      } 

      return responseValue; 
     } 
    } 
+0

你是什么意思“HTTP会话”? – mason

+0

只是试图在客户端上通过HTTP维护会话。 – Phillip

+0

网络是无状态的,所以我不知道“通过HTTP维护会话”是什么意思。 – mason

回答

0

您需要在调用之间保持相同的cookie容器。

修改你的方法,以允许呼叫者注入容器:

public string MakeRequest(string parameters, CookieContainer cookie) 

然后调用它像这样:

var cookie = new CookieContainer(); 
MakeRequest(loginUrl, cookie); 
MakeRequest(urlThatRequiresSession, cookie); 

或者,你可以只在实例级别范围cookie,而不是本地。

+0

太好了,谢谢。我会更新代码。 – Phillip

+0

大多数服务器将只允许每个用户从客户端PC进行一次连接。服务器使用cookie来确定连接的数量。所以请确保你使用像约翰说的那样的cookie。这可能有助于使用像wireshark或fiddler这样的嗅探器来确定连接实际关闭的原因以及发生的错误。 – jdweng

+0

这将解释为什么,因为我不断为每个请求创建新的cookie。谢谢。 – Phillip