提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、HTTP是什么?
请求行(request line)、请求头(header)、和请求数据3个部分组成
(1)请求行 包括请求方法、URL、和HTTP协议版本三个部分
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
主要学习
GET:当客户端要从服务器中读取文档时,使用GET方法
请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。
POST:当客户端给服务器提供信息较多时可以使用POST方法
POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,可用来传送文件。
(2)请求头部
由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔
典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
(3) 请求头与请求数据中间的空行
二、使用步骤
代码如下(示例):
cout << "-----------客户端-----------" << endl;
// 1 初始化
WSADATA wsadata;
WSAStartup(MAKEWORD(2, 2), &wsadata);
// 2 创建套接字
SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (SOCKET_ERROR == clientSocket) {
cout << "套接字闯创建失败!" << endl;
}
else {
cout << "套接字创建成功!" << endl;
}
// 3 绑定套接字 指定绑定的IP地址和端口号
sockaddr_in socketAddr;
socketAddr.sin_family = PF_INET;
socketAddr.sin_addr.S_un.S_addr = inet_addr("192.168.0.150");
socketAddr.sin_port = htons(8083);
int cRes = connect(clientSocket, (SOCKADDR*)&socketAddr, sizeof(SOCKADDR));
if (SOCKET_ERROR == cRes) {
cout << "客户端:\t\t与服务器连接失败....." << endl;
}
else {
cout << "客户端:\t\t与服务器连接成功....." << endl;
}
char *send_header =" HTTP/1.1\r\n"
"Connection:Keep-Alive\r\n"
"Accept-Encoding:gzip, deflate\r\n"
"Accept-Language:zh-CN,en,*\r\n"
"Content-Type:application/x-www-form-urlencoded; charset=UTF-8\r\n"
"host:192.168.0.xxx:9090\r\n"
"User-Agent:Mozilla/5.0\r\n\r\n";
//拼接path 和请求头
int len =strlen(path)+strlen(send_header);
char *n_str =new char[len+1];
strcpy(n_str,path);
strcat(n_str,send_header);
cout<<"send_str:"<<n_str<<endl;
// 4 发送请求头
int result=send(clientSocket, n_str, strlen(n_str), 0);
cout<<"result:"<<result<<endl;
if(result!=-1)
cout<<"str"<<result<<endl;
cout << "请求发送啦" << endl;
// 5 发送/接受 数据
char recvBuf[1024] = {};
recv(clientSocket, recvBuf, 1024, 0);
cout << "客户端接收数据 : " << recvBuf << endl << endl;
// 6 关闭socket
closesocket(clientSocket);
// 7 终止
WSACleanup();
cout << "客户端退出" << endl;
cin.get();
return 0;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)