Http Get请求简单实例(C++)

2023-05-16

转载自:掘金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;
}


复制代码

运行结果:

文章分类

后端

文章标签

正在上传…重新上传取消​

HTTP

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Http Get请求简单实例(C++) 的相关文章

  • REST URL 结构建议

    我正在尝试为我正在开发的网站的愿望清单部分敲定一个宁静的网址结构 这是一个非常简单的模型 用户可以有许多愿望清单 每个愿望清单可以包含许多产品 目前我有明显的 CRUD URL 来操作愿望清单本身 GET account wishlists
  • HttpGet 401 状态代码后跟 200 状态代码

    我使用 Apachage HttpComponent 访问 Web 服务时遇到奇怪的行为 我可以访问服务器日志 当我尝试连接到服务器并执行 httpGet 命令时 我可以在日志中首先看到 401 状态 http 未经授权 然后看到 200
  • $http.get 和 method:'GET' 之间的区别

    我正在使用 Spring Data REST 并有一个 MySQL DB 来管理我的数据 我使用 AngularJS 编写了第一页 并希望从数据库中获取数据 为了获取我的数据 我知道有两种不同的方式 http get http myURL
  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • 身份验证中的随机数使用

    在基于摘要的身份验证中 随机数由服务器生成 然而 在基于 OAuth 的身份验证中 随机数是由客户端生成的 我想知道是否有人知道差异的原因 随机数用于使请求唯一 在没有随机数的身份验证方案中 恶意客户端可以生成一次请求并重放多次 即使计算成
  • 在 Flex 中以 HTTP Post 方式上传任意数据

    我们目前有一个 Java 小程序 可以生成大量数据并将其上传到我们的服务器 我们拥有的上传方法之一是使用 HTTP POST 到我们的服务器 其内容只是原始数据 没有多部分编码或任何内容 我正在考虑实现一个具有相同功能的 Flex 应用程序
  • ajax“GET”调用返回 jsonp 正常,但回调产生“未定义”数据

    我正在使用来自 html 页面的 ajax jquery 调用来访问跨域 Web 服务 虽然我可以使用 firebug 查看 jsonp 数据 但我无法将其加载到变量中 甚至无法显示它 出于调试目的 尝试使用 jsonpCallback s
  • OkHttp如何获取Json字符串?

    Solution 这是我这边的一个错误 正确的方法是响应 body string 以外响应 body toString 我使用 Jetty servlet URL 是http 172 16 10 126 8789 test path jso
  • Chrome 在传输一定量的数据后挂起 - 等待可用的套接字

    我有一个浏览器游戏 最近我开始向游戏添加音频 Chrome 无法加载整个页面并卡在 91 requests 8 1 MB transferred 并且不再加载任何内容 它甚至破坏了所有其他选项卡中的网站 说Waiting for avail
  • 通话后返回App

    我正在尝试通过应用程序拨打电话 我希望它在通话后返回到应用程序 我在这个论坛问过这个问题 但我不明白答案 如何在 Android 中拨打电话并在通话结束后返回到我的活动 https stackoverflow com questions 1
  • 返回重定向作为对 Ajax(fetch、XHR 等)请求的响应

    如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果服务器发送重定向 又名 302 响应加上 Location 标头 浏览器将自动遵循重定向 对此的回应second请求 假
  • 当会话令牌无效时,我应该使用什么状态代码?

    创建 Web 服务 RESTful 时 当会话令牌无效时我应该使用什么状态代码 目前我公司的人给我发了一个404 未找到 但我认为这是不正确的 因为资源存在 也许我应该使用 401 Unauthorized 你怎么认为 您建议我在这种情况下
  • 多个客户端如何同时连接到服务器上的一个端口(例如 80)? [复制]

    这个问题在这里已经有答案了 我了解端口工作原理的基础知识 但是 我不明白的是多个客户端如何同时连接到端口 80 我知道每个客户端都有一个唯一的 对于他们的机器 端口 服务器是否从可用端口回复客户端 并简单地声明回复来自 80 这是如何运作的
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http
  • 使用什么 API 在现有 MFC 应用程序中添加 HTTP 客户端支持?

    我最近接到一项任务 要添加与以下内容交互的能力网络地图服务 http en wikipedia org wiki Web Map Service到现有的 MFC 应用程序 我需要客户端 HTTP API 根据我的研究 领先的候选人似乎是CA
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 为什么 websocket 需要使用 HTTP 进行打开握手?为什么不能成为一个独立的协议呢?

    Websocket 的设计方式是 通过使其握手成为有效的 HTTP 升级请求 其服务器可以与 HTTP 服务器共享端口 我对这个设计理念存有疑问 无论如何 WebSocket 协议都是一个独立的基于 TCP 的协议 为什么我们需要这个 HT
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 对于一般不成功的请求(不是错误),适当的 HTTP 状态代码响应是什么?

    我正在创建一个 RESTful API 它将处理许多用户交互 包括使用存储的信用卡下订单 如果订单成功 我将返回 200 OK 如果订单请求格式错误或无效 我将返回 400 Bad Request 但如果订单实际处理过程中出现问题 我该怎么
  • 如何在 PHP 中使用 file_get_contents 获取图像的 MIME 类型

    我需要获取图像的 MIME 类型 但我只有图像的正文file get contents 是否有可能获取 MIME 类型 是的 你可以这样得到它 file info new finfo FILEINFO MIME TYPE mime type

随机推荐