httpwebrequest 跨域
时间: 2023-12-14 14:04:22 浏览: 101
在使用 HttpWebRequest 进行跨域请求时,需要注意以下几点:
1. 需要设置请求头中的 Origin 字段,表示请求的来源域名。
2. 如果请求需要携带 Cookie,需要设置 CookieContainer 属性,保证在跨域请求时 Cookie 能够被正确传递。
3. 如果需要发送数据(如 POST 请求),需要设置请求头中的 Content-Type 字段和 Content-Length 字段。
4. 需要设置 AllowAutoRedirect 属性为 false,避免在跨域请求时自动进行重定向。
5. 在发送请求前,需要先发送 OPTIONS 请求,获取服务器允许的跨域请求方法和请求头信息。
示例代码:
```
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://example.com/api");
request.Method = "POST";
request.Headers.Add("Origin", "http://example.com");
request.CookieContainer = new CookieContainer();
request.ContentType = "application/json";
request.ContentLength = postData.Length;
request.AllowAutoRedirect = false;
// 发送 OPTIONS 请求
request.Method = "OPTIONS";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string allowedMethods = response.Headers["Access-Control-Allow-Methods"];
string allowedHeaders = response.Headers["Access-Control-Allow-Headers"];
// 恢复为 POST 请求
request.Method = "POST";
request.Headers["Access-Control-Request-Method"] = allowedMethods;
request.Headers["Access-Control-Request-Headers"] = allowedHeaders;
// 发送 POST 请求
using (Stream stream = request.GetRequestStream())
{
stream.Write(postData, 0, postData.Length);
}
response = (HttpWebResponse)request.GetResponse();
```
需要注意的是,跨域请求需要服务器端设置 CORS 相关的响应头信息,来允许跨域请求。如果服务器没有设置相关的响应头信息,那么即使客户端设置了跨域请求的相关信息,也无法进行跨域请求。
阅读全文