转载自:掘金https://juejin.cn/post/6844903897161531400
Http Get请求简单实例(C++)
HTTP报文
HTTP请求报文
请求行
: GET /HTTP/1.1 格式:请求的方法 + http版本
首部字段
:
Host : 需要访问的url (必须)
**User-Agent:**请求浏览器类型
**Accept-Language:**客户端接收的自然语言
**Accept-Encoding:**客户端接收的编码压缩格式
**connection:**连接方式
C++代码示例:
// HttpReq.cpp : 定义控制台应用程序的入口点。
//
// HttpReq.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
using namespace std;
bool HttpGetReq()
{
//1.初始化套接字库
WORD socket_version = MAKEWORD(2,2); //套接字版本
WSADATA wsaData;
int flag_init_socket = WSAStartup(socket_version,&wsaData);
if (flag_init_socket!= 0)
{
cout << "初始化套接字失败" << endl;
return false;
}
//2.连接socket
//AF_INET 指的是IPV4协议 //sock_stream 是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET与tcp协议相对应
//IPPROTO_TCP:传输层采用的协议类型
//socket参数含义:1.网络层协议 2.传输数据的方式 3.传输层的协议类型
SOCKET m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
const char* host_url = "www.baidu.com";
struct hostent *host_info;
host_info = gethostbyname(host_url);
//host_info为空 说明没有该消息
if (host_info == nullptr)
{
cout << "该主机url失败!" << endl;
return false;
}
//设置服务器SocketAddr类型--即包括ip地址和端口号
//设置必要socket地址信息 服务器地址 端口号
//其中端口号对应相应服务 --:80--》http服务 https://blog.csdn.net/qq_25184739/article/details/70653216
SOCKADDR_IN SockAddr;
SockAddr.sin_port = htons(80); //80端口表示http端口
SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.s_addr = *((unsigned long*)host_info->h_addr); //请求服务器的地址 由host_info获取
//3.连接到服务器
int flag_connect_socket = connect(m_socket,(SOCKADDR *)(&SockAddr),sizeof(SockAddr));
if (flag_connect_socket!=0)
{
cout << "connect to server fail!" << endl;
return false;
}
//4.发送GET请求
//设置get请求报文
const char * req_header = "GET /HTTP/1.1\r\n"; //请求头
const char* total_req_header = "Host:www.baidu.com\r\nConnection: close\r\n\r\n";
const char* all_req_header = "GET / HTTP/1.1\r\nHost:www.baidu.com\r\nConnection: close\r\n\r\n";
send(m_socket,all_req_header,strlen(all_req_header),0);
//5.接收服务器响应的数据
char recvBuffer[10000];
int recvDataLength;
while ((recvDataLength = recv(m_socket,recvBuffer,10000,0))> 0)
{
cout << "传回的数据为:\n"<< endl;
int i = 0;
while (recvBuffer[i] >= 32 || recvBuffer[i] == '\n' || recvBuffer[i] == '\r') {
cout << recvBuffer[i];
i += 1;
}
break;
}
//6.关闭连接
closesocket(m_socket);
WSACleanup();
}
int _tmain(int argc, _TCHAR* argv[])
{
HttpGetReq();
cout << "\n测试结束" << endl;
int mm ;
cin>> mm;
return 0;
}
复制代码
运行结果:
文章分类
文章标签