【问题标题】:Send POST request with cookie and get content使用 cookie 发送 POST 请求并获取内容
【发布时间】:2015-11-08 20:55:58
【问题描述】:

我正在为我的 Web API MVC 应用程序构建测试,并且我正在尝试发送一个 POST 请求。我需要发送一个 cookie,然后读取我从响应中返回的内容。

我尝试使用 HttpWebRequest,它与 cookie 配合得很好(我得到了 StatusCode OK),但我无法从响应中读取内容:

public static HttpWebResponse WebRequest(string methodURL, string method, string json, HttpCookie cookie)
        {
            string URL = baseURL + methodURL;
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.CreateHttp(URL);
            httpWebRequest.ContentType = "text/json";
            httpWebRequest.Method = method;
            httpWebRequest.Headers.Add("Cookie", cookie.Name+"="+cookie.Value);
            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                streamWriter.Write(json);
                streamWriter.Close();
            }
            try
            {
                return (HttpWebResponse)httpWebRequest.GetResponse();
            }
            catch (System.Net.WebException ex)
            {
                using (WebResponse response = ex.Response)
                {
                    return (HttpWebResponse)response;
                }
            }
        }

然后我尝试使用 HttpResponseMessage 取回内容,但我无法正确发送 cookie - 我得到 StatusCode“未授权”。

 public static HttpResponseMessage WebRequest(string methodURL, string method, string json, HttpCookie cookie)
        {
            string URL = baseURL + methodURL;

            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(URL);
            client.DefaultRequestHeaders
                  .Accept
                  .Add(new MediaTypeWithQualityHeaderValue("text/json"));
            client.DefaultRequestHeaders.Add("Cookie", cookie.Name + "=" + cookie.Value);

            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, URL);
            request.Content = new StringContent(json, Encoding.UTF8, "text/json");
            request.Headers.Add("Cookie", cookie.Name + "=" + cookie.Value);
            request.Properties.Add("Cookie", cookie.Name + "=" + cookie.Value);
            Task<HttpResponseMessage> r  = client.SendAsync(request)
              .ContinueWith(responseTask =>
              {
                  HttpResponseMessage message = responseTask.Result;
                  message.Headers.Add("Cookie", cookie.Name + "=" + cookie.Value);
                  return message;

              });
            return r.Result;
        }

有什么想法吗?

【问题讨论】:

    标签: c# cookies asp.net-web-api httpwebresponse


    【解决方案1】:

    对于第一种方式,您必须使用cookieContainer

    httpWebRequest.CookieContainer = new CookieContainer();
    httpWebRequest.CookieContainer.Add(cookie);
    

    要阅读响应,您可以使用类似的东西,

    var responseStr = new StringBuilder();
    try
    {
        var response = (HttpWebResponse) httpWebRequest.GetResponse();
        var responseCode = response.StatusCode;
    
        var receiveStream = response.GetResponseStream();
        if (receiveStream != null)
        {
            var instr = new StreamReader(receiveStream, Encoding.UTF8);
            String inputLine;
            while ((inputLine = instr.ReadLine()) != null)
            {
                responseStr.Append(inputLine);
            }
            instr.Close();
        }
    } catch (Exception e)
    {
    }
    

    【讨论】:

    • 我没有“client.CookieContaine”
    • 在你的情况下是 httpWebRequest.CookieContainer
    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多