发送POST请求与cookie和获取内容
本文关键字:获取 cookie POST 请求 发送 | 更新日期: 2023-09-27 18:08:02
我正在构建测试到我的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;
}
任何想法?
对于第一种方式,您必须使用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)
{
}