项目仓库 GitHub
请求url处理
- url有两种,一种是通过域名,一种直接ip
- 直接ip常用于客户端的api调用,或者是在测试环境
- 域名一般是ajax调用api,或者是网页的获取,有几个好处,ip可能会变但网址一般不变,可以不用修改。并且可以起到负载均衡的作用,无论dns还是nginx.
请求url字符串必须以协议名开头,协议名开头,c#,java的httpclient都是这样没记错的话,至于协议现在只支持http.https等我写完服务器再来搞
MyString protocolStr = "http://";
if (url.find(protocolStr)!=0)
{
MyString Msg = "标明协议!仅允许使用" + protocolStr;
throw exception(Msg.c_str());
}
对于http协议,host和请求路径是分开的,所以需要对url进一步拆分
url.erase(0, protocolStr.length());//移除协议名称
MyString host = url.substr(0, url.find("/"));
Header["Host"] = host;
url.erase(0, host.length());
Path = url.length()!=0?url:"/";//在前面已经将http协议头和主机名ip移去
Socket socket = GetSocket();
//getsocket函数已修改,默认获取客户端socket,客户端的端口由系统临时分配不需要指定
//若指定端口号则认为在获取一个服务器socket
Connection(socket,host);
connection仅用于请求,连接目标服务器端口
- host可以以为
- 127.0.0.1:5000
- www.baidu.com
- zanllp.cn:5000
若在host中有:,则修改端口默认80
若在host中有字母,则通过GetIpByHost获取ip
目前仅考虑ipv4,ipv6等ssl后再来
void Connection(Socket socket,MyString host)
{
int port = 80;//没有:8080,直接80就行
int indexPort = host.find(":");
if (indexPort!=-1)
{
//127.0.0.1:5000,改端口为5000<