网站内容的建设软文广告经典案例100字
以下是关于 HttpWebRequest
中请求头(Request Headers) 和 响应头(Response Headers) 的详细说明,包括如何设置、读取及常见用法:
其实HttpClient 和 HttpWebRequest
在处理请求头和响应头方面有一些相似之处,但它们在使用方法和功能上存在一些差异。 请求头和响应头的处理方式
HttpClient:自定义请求头:HttpClient支持自定义HTTP请求头,这使得它能够更灵活地处理各种HTTP请求。通过设置HttpRequestMessage的Headers属性,可以添加或修改请求头
响应头信息:HttpClient在接收响应时,可以访问响应头信息,包括状态码和响应头。这使得开发者能够详细了解服务器的响应情况
HttpWebRequest:
自定义请求头:虽然HttpWebRequest也支持自定义HTTP请求头,但它的使用方式相对较为底层和复杂。开发者需要通过WebRequest.Create方法创建请求对象,并通过设置Headers属性来添加或修改请求头
响应头信息:HttpWebRequest在获取响应时,同样可以访问状态码和响应头信息,但整体使用过程相对繁琐
一、请求头(Request Headers)的设置
请求头用于向服务器传递客户端的附加信息(如身份验证、数据类型、客户端标识等)。可以通过 HttpWebRequest.Headers
属性或直接属性(如 ContentType
、Accept
)进行设置。
1. 常见请求头设置示例
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.example.com");
request.Method = "POST";// 设置通用请求头
request.Headers.Add("X-Custom-Header", "MyValue"); // 自定义头// 设置用户代理(User-Agent)
request.UserAgent = "MyApp/1.0";// 设置内容类型(Content-Type)
request.ContentType = "application/json"; // 通常用于POST/PUT请求// 设置Accept头(告诉服务器期望的响应格式)
request.Accept = "application/json";// 设置身份验证头(如Basic Auth)
string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("username:password"));
request.Headers.Add("Authorization", $"Basic {credentials}");// 设置超时头(可选)
request.Headers.Add("X-Request-Timeout", "5000"); // 示例自定义超时头
2. 常见请求头字段说明
头字段 | 用途 |
---|---|
User-Agent | 标识客户端(如浏览器或应用程序名称及版本)。 |
Content-Type | 指定请求体的MIME类型(如 application/json , application/x-www-form-urlencoded )。 |
Accept | 告知服务器客户端可接受的响应内容类型(如 application/json )。 |
Authorization | 传递身份验证信息(如Basic Auth、Bearer Token)。 |
Referer | 指示请求来源页面的URL。 |
Content-Length | 请求体的字节长度(通常自动计算,但可手动设置)。 |
X-Requested-With | 标识请求来源(如AJAX请求)。 |
二、响应头(Response Headers)的读取
响应头由服务器返回,包含关于资源元数据的信息(如内容类型、缓存策略、服务器信息等)。可以通过 HttpWebResponse.Headers
属性或直接属性(如 ContentType
, StatusCode
)读取。
1. 响应头读取示例
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{// 读取状态码Console.WriteLine($"Status Code: {response.StatusCode}"); // 如 200 OK// 读取通用响应头string contentType = response.ContentType; // 获取内容类型(如application/json)string server = response.Server; // 获取服务器软件(如nginx/1.20)// 读取自定义响应头string customHeader = response.Headers["X-Custom-Header"];// 读取所有头字段foreach (string header in response.Headers){Console.WriteLine($"{header}: {response.Headers[header]}");}
}
2. 常见响应头字段说明
头字段 | 用途 |
---|---|
Content-Type | 响应内容的MIME类型(如 text/html , application/json )。 |
Content-Length | 响应体的字节长度。 |
Server | 服务器软件名称及版本(如 Apache/2.4.41 )。 |
Set-Cookie | 设置客户端Cookie(可能有多个)。 |
Location | 重定向目标URL(3xx状态码时出现)。 |
Cache-Control | 缓存策略(如 no-cache , max-age=3600 )。 |
X-Powered-By | 服务器后端技术(如 PHP/7.4.3 )。 |
三、高级用法示例
1. 处理重定向(通过响应头 Location
)
try
{using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()){// 正常处理响应}
}
catch (WebException ex) when (ex.Response != null)
{HttpWebResponse errorResponse = (HttpWebResponse)ex.Response;if (errorResponse.StatusCode == HttpStatusCode.Found) // 302重定向{string redirectUrl = errorResponse.Headers["Location"];Console.WriteLine($"Redirect to: {redirectUrl}");// 可以递归重定向处理}
}
2. 设置和读取JSON请求/响应
// 设置JSON请求头
request.ContentType = "application/json";
request.Accept = "application/json";// 发送JSON数据
string jsonBody = "{\"key\":\"value\"}";
using (Stream stream = request.GetRequestStream())
using (StreamWriter writer = new StreamWriter(stream))
{writer.Write(jsonBody);
}// 读取JSON响应
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{string contentType = response.ContentType; // 应为application/jsonusing (StreamReader reader = new StreamReader(response.GetResponseStream())){string jsonResult = reader.ReadToEnd();Console.WriteLine(jsonResult);}
}
3. 处理Cookie(通过响应头 Set-Cookie
)
// 保存响应中的Cookie
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{// Cookie自动保存到cookieContainer
}// 后续请求自动携带Cookie
request.CookieContainer = cookieContainer;
四、注意事项
- 头字段的大小写:HTTP头字段名不区分大小写,但通常使用驼峰或大写形式(如
X-Custom-Header
)。 - 头字段的覆盖:如果多次设置相同头字段,
Headers.Add
会追加值,而Headers.Set
会覆盖。 - 自动处理的头:某些头字段(如
Content-Length
、Host
)由HttpWebRequest
自动处理,无需手动设置。 - 安全性:敏感信息(如
Authorization
头)应通过HTTPS传输以防止泄露。
五、总结
- 请求头:通过
HttpWebRequest.Headers
或直接属性设置,用于控制请求行为和传递元数据。 - 响应头:通过
HttpWebResponse.Headers
或直接属性读取,用于获取服务器返回的元数据。 - 常见场景:身份验证(
Authorization
)、数据格式协商(Content-Type
)、客户端标识(User-Agent
)、重定向处理(Location
)等。