基本概念
**HTTP是超文本传输协议(HyperText Transfer Protocol)的简称,它建立在C/S架构的应用层协议。
**
**HTTP、FTP、Telnet等协议都是建立在TCP/IP协议基础上的,而TCP/IP协议是协议层的内容,它定义了计算机间通信的基础协议。
**
**在HTTP协议中,客户端负责发起一个Request,该Request中含有请求方法、URL、协议版本等信息,服务端在接受到该Request后会返回一个Response,该Response中含有状态码、响应内容等信息,这一模型称为请求/响应模型。
**
HTTP协议通信的核心是HTTP报文,我们将其分为请求报文和响应报文。其中,由客户端发出的HTTP报文称为请求报文,由服务端发出的报文称为响应报文.
请求报文:请求报文通常由浏览器来发起,当我们访问一个网页或者请求一个资源的时候都会产生请求报文
// 基本请求信息
Request URL: https://www.baidu.com
Request Method: GET
Status Code: 200 OK
Remote Address: 111.206.209.78:443
Referrer Policy: unsafe-url
//请求头
Accept: application/json, text/javascript, q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Cookie: BIDUPSID=344D077FD6A3F97616DBD66A24EBDC96
Host: zhidao.baidu.com
Pragma: no-cache
Referer: https://zhidao.baidu.com/question/366757430246244692.html
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
X-ik-ssl: 1
X-Requested-With: XMLHttpRequest
//请求参数
...
请求参数解析
**Host: 请求目标的网站
**
**Connection: 默认为“keep-Alive“,默认支持长连接
**
**Cache-Control:这玩意跟缓存有关,其中no-cache表示无缓存
**
**User-Agent:告诉serve 这个client的身份,一般由浏览器决定,比如:浏览器类型,版本等等
**
**Accept:以及后面的Accept打头的都是表明client能够接收的种类和类型
**
Cookie:一般会将登录的一些信息放在cookie中
响应报文:响应报文是指在服务端接收并处理了客户端的请求信息以后,服务端发送给客户端的HTTP报文
// 响应状态 ,200 表示成功
HTTP/1.1 200 OK
/* 响应头部 */
Access-Control-Allow-Headers: X-ik-ssl,X-ik-token,X-ik-utdata,X-ik-appid,X-ik-cuid,X-ik-fc,X-swan-version,X-ik-tries,X-fail,X-ik-appversion,X-ik-appname,Content-Type,SWAN_UPGRADE_CHECK
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 21
Content-Type: text/html
Date: Fri, 23 Dec 2022 11:49:43 GMT
Not-Try: 0
Server: Apache
Vary: Accept-Encoding
Wait: 2
/* 响应信息 */
...
响应参数解析
**Http/1.1 200 OK:200表示返回的状态码是正常,OK则是描述性的状态码
**
**Date:表示服务器响应的时间
**
**Server: 响应客户端的服务器。
**
**Content-Length:表示服务器返回给客户端正文的字节流长度
**
**Content-Type:表示正文的类型
**
Content-Encoding:文档类型的编码方式,服务器端采用gzip的形式进行了文档压缩
常见的方法有GET、POST 两种http请求方式
**GET:最为常见的一种请示方式。当客户端从服务器读取文档或者通过一个链接来访问页面的时候,都是采用GET方式来请求的
**
**POST:POST克服了GET方式对参数长度存在限制的缺点,以键-值形式将参数封装在HTTP请求中,所以从理论上讲它对参数长度没有限制,但是实际上各个服务器会规定对POST提交数据大小进行限制;
**
注: POST的安全性比GET的高,因对用户来讲参数传递过程是不可见的。 类似用户登录之类的基本都是采用post形式
!
编辑
GET方式:
public static string doGet()
{
string url="www.baidu.com";
//创建
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
//设置请求方法
httpWebRequest.Method = "GET";
//请求超时时间
httpWebRequest.Timeout = 30000;
//发送请求
HttpWebResponse response=null;
Stream s = null;
StreamReader sRead = null;
string postContent = null;
try
{
//获得响应流
response = (HttpWebResponse)httpWebRequest.GetResponse();
s = response.GetResponseStream();
sRead = new StreamReader(s);
postContent = sRead.ReadToEnd();
}
catch (WebException ex)
{
response = ex.Response as HttpWebResponse;
log.Error(ex.Message.ToString(), ex);
}
finally
{
if(sRead != null)
{
sRead.Close();
}
if(s != null)
{
s.Close();
}
if(response != null)
{
response.Close();
}
}
return postContent;//返回Json数据
}
POST方式:
public static string doPost()
{
string strURL = "wwww.baidu.com";
//创建一个HTTP请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
//Post请求方式
request.Method = "POST";
//内容类型
request.ContentType = "application/json";
request.Accept = "application/json";
//将Json字符串转化为字节
byte[] payload = System.Text.Encoding.UTF8.GetBytes(jsonParas);
//设置请求的ContentLength
request.ContentLength = payload.Length;
//发送请求,获得请求流
Stream writer;
try
{
writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
}
catch (Exception ex)
{
log.Error("连接服务器失败!" + ex.Message.ToString(), ex);
throw ex;
}
//将请求参数写入流
writer.Write(payload, 0, payload.Length);
writer.Close();//关闭请求流
HttpWebResponse response = null;
Stream s = null;
StreamReader sRead = null;
string postContent = null;
try
{
//获得响应流
response = (HttpWebResponse)request.GetResponse();
s = response.GetResponseStream();
sRead = new StreamReader(s);
postContent = sRead.ReadToEnd();
}
catch (WebException ex)
{
response = ex.Response as HttpWebResponse;
log.Error(ex.Message.ToString(), ex);
}
finally
{
if (sRead != null)
{
sRead.Close();
}
if (s != null)
{
s.Close();
}
if (response != null)
{
response.Close();
}
}
return postContent;//返回Json数据
}
全部0条评论
快来发表一下你的评论吧 !