c语言socket使用http协议访问apache服务器

如何使用C语言实现简单的HTTP服务器 本篇博客主要介绍了如何使用C语言实现一个简单的HTTP服务器。我们使用了socket编程,并介绍了socket()、setsockopt()、bind()、listen()、accept()、read()和send()等函数的用法。在实际应用中,我们需要考虑更多的细节,例如错误处理、并发处理、请求解析、路由分发、响应格式化等等。但是本篇博客仍然能够帮助初学者了解HTTP服务器的基本实现原理。 阅读详情

1、前言

简单理解http协议,其实就是对发送的数据进行了包装(多了表示各种属性的报头)

此链接可以学习以下编写http服务器:超轻量型http服务器 tinyhttpd

http协议报文

2、环境

本人电脑配置了apache+php的开发环境,使用80端口

3、代码

client

// ConnectToPHPServer.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"  
#include	<stdio.h> 
#include	<winsock.h> 
#include	<string.h> 
#pragma comment(lib, "ws2_32.lib") 

#define PORT 80
#define SIZE 512
#define MAX_SIZE 1024

void buildGETHeader(char* header, int size, char* host, char* res)
{
	memset(header,0,size);
	strcat(header,"GET ");
	strcat(header,res);
	strcat(header," HTTP/1.1\r\n");
	strcat(header,"HOST:");
	strcat(header,host);
	strcat(header,"\r\nConnection: Keep-Alive\r\n\r\n");

	return;
}

void buildPOSTHeader(char* header, int size, char* host, char* res)
{
	memset(header,0,size);
	strcat(header,"POST ");
	strcat(header,res);
	strcat(header," HTTP/1.1\r\n");
	strcat(header,"HOST:");
	strcat(header,host);
	strcat(header, "\r\nContent-Type: application/x-www-form-urlencoded\r\n");
    strcat(header, "Content-Length: 8\r\n");
	strcat(header,"Connection: Keep-Alive\r\n\r\n");
	
	strcat(header,"user=cjc\r\n\r\n");

	return;
}

void sendData(SOCKET serverSocket, char* data)
{
	send(serverSocket, data, strlen(data),0);
}

void getData(SOCKET serverSocket, char* data, int size)
{
	int num=0;
	char buf[SIZE];

	memset(data,0,MAX_SIZE);
	memset(buf,0,SIZE);
	while(recv(serverSocket,buf,SIZE,0)>0)
	{
		strcat(data,buf);
		memset(buf,0,SIZE);
	}
	return;
}

void parseURL(char*url , char*& host, char*& res)
{
	char* p;
	int num=0;

	p=url+7;
	while(*p!='/' && *p!='\0')
	{
		p++;
	}
	if(strlen(p)!=0)
	{
		num=strlen(p)+1;
		res=(char*)malloc(num);
		memset(res,0,num);
		strcpy(res,p);
	}
	else
	{
		res=(char*)malloc(2);
		memset(res,0,2);
		res[0]='/';
	}
	*p='\0';
	host=url+7;

	return;
}

void connectToHost(char* host, 	SOCKET& serverSocket, char* res)
{
	WSAData wsadata={0};
	struct sockaddr_in addr;
	struct hostent* pHost;
	char header[SIZE],buf[MAX_SIZE];

	if(WSAStartup(MAKEWORD(2,2),&wsadata))
	{
		printf("WSASartup failed!\n");
		system("pause");
		exit(-1);
	}
	serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	pHost=gethostbyname(host);
	addr.sin_family=AF_INET;
	addr.sin_addr.S_un.S_addr=*((unsigned long*)pHost->h_addr);
	addr.sin_port=htons(PORT);
	connect(serverSocket,(SOCKADDR*)&addr,sizeof(addr));
	printf("Connect to host OK!\n");

	return;
}



int main(void)
{
	char url[100]="http://localhost/Workspace/FirstPHP/TestPost.php";
	char *host,*res,header[SIZE],buf[MAX_SIZE];
	SOCKET serverSocket;
	
	parseURL(url,host,res);
	connectToHost(host,serverSocket,res);
	/*buildGETHeader(header,SIZE,host,res);
	sendData(serverSocket,header);
	getData(serverSocket,buf,MAX_SIZE);
	printf("%s\n",buf);*/
	buildPOSTHeader(header,SIZE,host,res);
	sendData(serverSocket,header);
	getData(serverSocket,buf,MAX_SIZE);
	printf("%s\n",buf);



	closesocket(serverSocket);
	WSACleanup();
	system("pause");
	return 0;
}

server

<?php
	if(isset($_POST['user']))
	{
		echo $_POST['user'];
	}
?>

4、结果

如果成功的话,client端dox执行窗口的末尾会输出cjc字样

Suricata规则进阶:如何像老鸟一样用Lua脚本定制复杂威胁检测逻辑 本文深入探讨了如何利用Lua脚本在Suricata中定制复杂威胁检测逻辑,提升网络安全防护能力。通过Lua脚本引擎,安全工程师可以实现多维度条件判断和动态逻辑网构建,有效检测DNS隧道等高级威胁。文章详细介绍了Lua脚本的工作原理、性能优化策略、检测逻辑框架构建、与规则引擎的协同方法,以及实战案例和调试技巧,帮助读者从规则使用者进阶为检测架构师。 阅读详情

相关推荐

从零实现C语言Web服务器:深入理解HTTP协议与网络编程

HTTP协议作为Web通信的基石,定义了客户端与服务器之间请求与响应的标准格式。其工作原理基于TCP/IP协议栈,通过建立连接、传输报文、关闭连接完成一次交互。理解HTTP协议对于掌握网络编程至关重要,它能帮助开发者构建高性能、可扩展的后端服务。在工程实践中,通过手动实现一个Web服务器,可以深入理解Socket编程、I/O多路复用等核心技术。C语言因其贴近系统底层,成为学习网络编程的理想选择,能够直观展示内存管理和指针操作等底层细节。本项目通过手搓一个C语言Web服务器,从单线程阻塞模型到基于epoll的

weixin_34184158的博客 268

从零实现C语言Web服务器:深入解析Socket、HTTP与Linux网络编程

网络编程是构建互联网应用的基石,其核心在于理解数据如何在网络中传输与处理。其基本原理基于客户端-服务器模型,通过TCP/IP协议栈实现可靠通信。Socket编程接口提供了网络通信的抽象,开发者通过创建、绑定、监听和接受连接等系统调用建立通信链路。HTTP协议作为应用层协议,定义了Web通信的请求-响应格式,其解析与构建是Web服务器的核心功能。从技术价值看,掌握底层网络编程能极大提升对高并发、高性能系统的设计与优化能力,尤其在需要极致性能的中间件、网关和分布式系统中至关重要。应用场景广泛,从嵌入式设备到大型

weixin_30536513的博客 413

C语言手搓HTTP服务器:从Socket到并发模型的底层网络编程实践

HTTP协议作为Web通信的基石,其底层实现原理是每一位后端开发者必须掌握的核心知识。理解HTTP协议的工作原理,关键在于剖析其基于TCP/IP协议栈的请求-响应模型,这涉及到网络字节序、Socket编程、报文解析等底层技术。掌握这些技术不仅能提升系统调试和性能优化的能力,更是构建高并发、高性能网络服务的工程基础。通过用C语言从零实现一个支持GET请求的HTTP服务器,开发者可以深入理解从Socket创建、地址绑定、监听连接到请求解析、响应构建的完整链路,并直面内存管理、并发处理等系统级挑战。这一实践过程尤

weixin_30600197的博客 447

C语言实现http post请求和get请求,post请求可以上传图片和文件

文章目录1.http协议简介2.http协议分析2.1 http请求2.1.1 请求行2.1.1.1 请求方法2.1.1.2 URL2.1.1.3 协议版本2.1.1.4 请求行总结2.1.2 请求头部2.1.3 请求数据2.2 http响应2.2.1 状态行2.2.2 消息报头2.2.3 响应正文3. 代码分析(可在arm平台中直接使用,全c实现)3.1 tcp基于协议代码3.2 基于http协议代码和测试用例 1.http协议简介   http协议叫做超文本传输协议,HTTP是一个基于TCP/IP通信协

Hallo_ween的博客 8565

C语言手写HTTPD网站服务器

C语言手写HTTPD网站服务器

weixin_55751709的博客 1346

C语言实现HTTP服务器:从Socket到select多路复用的网络编程实践

网络编程是构建现代互联网应用的基石,其核心在于理解客户端与服务器之间如何通过协议进行通信。HTTP协议作为Web通信的标准,定义了请求与响应的格式,而TCP Socket则是实现网络数据传输的底层接口。掌握这些基础概念对于开发高性能服务至关重要,其技术价值在于能够自主控制通信流程,优化资源利用,并深入理解网络性能瓶颈。在实际应用中,无论是Web服务器、API服务还是实时通信系统,都离不开对网络编程模型的合理选择。本文通过一个C语言实现的简易HTTP服务器项目,具体展示了如何使用select多路复用技术处理并

weixin_30902251的博客 339

C/C++中比较好用的HTTP开源库

http相关开源库

PRML_MAN的博客 1万+

C++原生实现HTTP服务器:从Socket到协议解析的底层实践

网络编程是构建分布式系统和Web服务的核心技术基础,其核心原理在于通过套接字(Socket)实现进程间通信。HTTP协议作为应用层协议,基于TCP/IP栈,定义了客户端与服务器之间的请求-响应交互模型。理解底层实现能帮助开发者优化性能、排查问题,并在资源受限或高定制化场景中实现完全控制。通过原生C++实现HTTP服务,开发者可以深入掌握从连接建立、数据读写到协议解析的完整流程,这对于嵌入式开发、高性能中间件和网络库开发具有重要价值。本文聚焦于使用C++标准库和操作系统API,从零构建一个支持基础HTTP/1

weixin_30879833的博客 540

Apache HTTP服务器搭建

1.HTTP协议简介 1.1客户端与服务器建立连接 客户端与服务器建立链接就是SOCKET连接。因此要指定极其名称、资源名称和端口号,可以通过URL来提供这些信息。 1.2客户向服务器提出请求 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行、请求头部、空行和请求数据四个部分组成,下图给出了请求报文的一般格式 1.请求行 请求行分为三个部分:请求方法、请求地址和协议版本...

weixin_43265596的博客 2904

使用Apache的HttpClient发送Http请求

使用Apache的HttpClient发送Http请求 1 基础概念 1.1 HttpClient、TCP/IP、Socket的区别 HttpClient是Apache中一个开源的项目。它实现了HTTP标准中Client端的所有功能,使用它能够很容易的进行HTTP信息的传输。 网络从下往上分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 TCP/IP协议:主要解决的是数据传输层...

偏偏爱吃梨的博客 2208

从零实现C语言多线程HTTP服务器:Socket编程与线程池实战

网络编程是构建现代互联网服务的基础,其核心在于理解客户端与服务器之间的通信机制。从原理层面看,服务器需要高效处理并发连接,避免因单个请求阻塞而影响整体性能。为实现这一目标,多线程模型成为关键技术,它通过创建多个工作线程并行处理请求,显著提升吞吐量。线程池技术进一步优化了这一过程,它预先创建并管理一组线程,避免了频繁创建销毁线程的开销,是构建高性能服务器的常见工程实践。结合HTTP协议解析与静态文件服务,开发者可以深入理解Web服务器的工作流程。本文以C语言为例,通过手写一个名为TinyHTTP的多线程服务器

weixin_30684743的博客 330

标准c语言建立简单的web服务器,C语言写的简易实用的web服务器

码农公社 210.net.cn210是何含义?10月24日是程序员节,1024 =210、210既210之意。Apache在码农界是比较知名的,它也是目前最接地气、使用最广泛的Web服务器。大家可以从news.netcraft.com/这个网站得到证实。Apache在功能、效率、开源三个方面对我很有吸引力,但囿于自己的技术水平,无法从Apache庞大的source code里面理清头绪。懒惰...

weixin_39534395的博客 2738

【C++】开源:cpp-httplib HTTP协议库配置与使用

cpp-httplib HTTP协议库配置与使用

DevFrank的博客 5538

【Linux之旅】HTTP 协议解析:从请求格式到构建 Web 服务器

本文将从 HTTP 协议的请求/响应格式出发,逐一拆解 URL、请求方法、状态码、常用 Header、Connection 长连接等核心概念,亲手实现一个支持 GET 和 POST 的最简 HTTP 服务器,并逐步扩展为能返回静态文件、解析表单数据的功能完备的 Web 服务器。读完本文,你将彻底理解 HTTP 协议的底层约定,并能从头写出一个可被浏览器访问的真实 Web 后端。

2302_80243065的博客 2309

5分钟搞懂深度学习如何革新声源定位:从GCC-PHAT到DNN的实战对比

本文深入对比了深度学习与传统GCC-PHAT方法在声源定位领域的实战表现。通过具体实验数据,展示了DNN模型在强混响、低信噪比等复杂场景下,如何实现定位准确率的显著提升,并探讨了其数据驱动范式带来的鲁棒性优势与工程部署挑战。

3a9bq4r8t2y的博客 223

西门子【Automation Framework V1.2】AF架构:从软件栈到高效自动化项目的构建蓝图

本文深入解析西门子Automation Framework V1.2 (AF架构) 的核心价值与实施蓝图。该框架通过定义标准化的软件栈(如TIA Portal V19、STEP7、WinCC Unified)和严格的安装配置流程,将自动化项目开发从依赖个人经验的“手工作坊”模式,转变为高效、可复制的工业化模式。遵循此架构,工程师能快速构建稳定可靠的项目基础,规避环境冲突,从而专注于核心工艺与逻辑设计,大幅提升团队协作与项目交付效率。

weixin_29230059的博客 428

C语言手搓HTTP服务器:从Socket到CGI的底层网络编程实战

HTTP协议作为Web通信的基石,其本质是基于TCP/IP的应用层协议,采用请求-响应模型实现客户端与服务器的数据交换。理解其底层原理,需要掌握Socket编程、TCP连接管理以及HTTP报文解析等核心技术。通过手动实现一个HTTP服务器,开发者能够深入理解网络I/O模型、并发处理机制以及资源管理的工程实践价值,这对于构建高性能网络服务、进行系统级性能优化至关重要。本文以经典的**tinyhttpd**项目为蓝本,详细拆解了**多线程并发模型**与**CGI进程间通信**的实现细节,涵盖了从Socket初始

weixin_30634661的博客 461

不止于使能:用汇川PLC功能块封装,实现伺服轴状态管理与安全逻辑

本文深入探讨了汇川PLC功能块封装在伺服轴控中的应用,详细介绍了如何通过高级封装技术实现伺服轴的状态管理与安全逻辑。文章涵盖了从基础使能到全生命周期监控的进化,多轴协同的实例化管理策略,以及安全逻辑的防御性编程技巧,为工业自动化领域的工程师提供了实用的解决方案和最佳实践。

weixin_28684825的博客 271

web基础http与apache

即 Hypertext Preprocessor(超文本预处理器),它是当今 Internet 上最为火热的脚本语言,其语法借鉴了 C、Java、PERL 等语言,但只需要很少的编程知识你就能使用 PHP 建立一个真正交互的 Web 站点。是一种面向对象、跨平台的动态类计算机程序设计语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的大型项目开发。frag:html资源片段,譬如html文档过大的时候,frag定位到html的一部分。

2301_78106979的博客 1672

多核异构处理器核间通信:从共享内存到RPMsg协议的实战解析

在多核异构处理器架构中,核间通信是实现高效协同计算的核心技术。其基本原理是通过共享内存作为数据交换的物理媒介,配合硬件信号机制实现同步与通知。从技术价值看,它解决了不同架构核心间的数据共享与指令协同问题,是释放异构计算潜力的关键。在应用场景上,该技术广泛应用于智能物联网设备、汽车电子和工业控制等领域,用于连接高性能应用处理器与实时微控制器。本文以典型的ARM Cortex-A与Cortex-M组合为例,深入剖析了基于共享内存和RPMsg协议的通信机制,涵盖了从硬件基础到软件协议栈的完整实现链路,并提供了针对

weixin_26969269的博客 447

使用AutoDL云服务器训练YOLO计算机视觉网络模型(AutoDL+Xftp+VS Code),附详细操作步骤

AutoDL AI算力云是一个提供人工智能算力服务的云平台。丰富的GPU资源:提供多种GPU型号,包括NVIDIA的A100A800L40V100RTX 4090RTX 3090等,能满足我们在不同场景下的需求,无论是进行大规模的AI训练还是复杂的科学计算等任务,都可以找到合适的GPU资源。灵活的付费方式:支持按量付费包日包周包月等多种付费模式。对于短期的实验或不确定时长的项目,可以选择按量付费;如果有长期稳定的算力需求,预付费或包周包月则可能更划算,可以根据自己的需求和预算进行选择。集成主流框架:集成了。

Limiiiing的博客 955

用C语言实现一个简单的HTTP客户端(HTTP Client)

作者:gobitan(雨水) 日期:2007-04-03 转载请注明出处http://blog.youkuaiyun.com/gobitan   HTTP协议是一个基于文本的协议,因此用C语言实现一个简易的HTTP客户端就不是什么难事。但如果对这个不熟悉,要想一下子实现一个HTTP GET方法取获取一个网页这么简单的功能恐怕也未必是两三分钟能搞定的事。其关键是要理解HTTP协议的工作原理,具体参见RFC2

快乐的小鸟 5432

22、云数据中心网络(DCN)部署最佳实践

本文详细介绍了云数据中心网络(DCN)部署的最佳实践,涵盖SDN设计、服务网络规划、管理网络规划等方面。通过合理的架构设计、路由规划和组件协同,提升数据中心的自动化水平、可靠性及安全性,以满足不断增长的业务需求。

d6e7f8的博客 185

500行代码构建完整HTTP服务器:Tinyhttpd终极学习指南

Tinyhttpd是J. David Blackstone在1999年编写的超轻量级HTTP服务器,整个项目代码不到500行,却完整实现了HTTP服务器的核心功能。这个项目被誉为学习网络编程和HTTP协议的经典教材,通过极简的代码展示了服务器程序的本质。无论你是网络编程初学者还是想深入理解HTTP协议实现原理的开发者,Tinyhttpd都能为你提供宝贵的实践机会。 ## 🔥 项目核心亮点:为什

gitblog_01152的博客 982

39-OpenLayers多图层切换显示隐藏,支持多个Layer同时显示和隐藏,OpenLayers懒加载瓦片

39-OpenLayers多图层切换显示隐藏,支持多个Layer同时显示和隐藏,OpenLayers懒加载瓦片

fxshy的博客 462

【华为OD机试】创建二叉树(python, java, c++, js)

请按下列描达构建一颗二叉树,并返回该树的根节点: 1、先创建值为-1的根结点,根节点在第0层; 2、然后根据operations依次添加节点: operations[i] = [height, index] 表示对第 height 层的第index 个节点node, 添加值为i 的子节点: 若node 无「左子节点」。则添加左子节点; 若node 有「左子节点」但无「右子节点」,则添加右子节点: 否则不作任何处理。 height、index 均从0开始计数;index 指所在层的创建顺序。

A_D_I_D_A_S的博客 188
上一篇: php访问数据库分页显示
下一篇: PHP用户注册基本处理
cjc雪狼
博客等级 码龄16年 108粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值