請求行
: GET /HTTP/1.1 格式:請求的方法 + http版本c++
首部字段
:瀏覽器
Host : 須要訪問的url (必須)服務器
**User-Agent:**請求瀏覽器類型網絡
**Accept-Language:**客戶端接收的天然語言socket
**Accept-Encoding:**客戶端接收的編碼壓縮格式tcp
**connection:**鏈接方式測試
C++代碼示例:ui
// 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;
}
複製代碼
運行結果:編碼