当前位置: 首页 > news >正文

网络编程-HTTP

1.万维网

WWW:万维网

              万维网是一个大规模的、联机式的信息储藏所(Web)

              万维网服务器后台标记万维网数据:url:统一资源定位符

              万维网客户端与万维网服务器之间的通信方式:HTTP:超文本传输协议(应用层)

              万维网客户端展示请求的数据:HTML:超文本标记语言

(1)URL

URL的一般形式:

eg:

https://www.baidu.com/                百度主页

HTTP:超文本传输协议(应用层)

             默认端口号为80

             备用端口号为8080

             基于传输层的TCP协议

(2)HTTP通信过程

万维网的工作过程:

HTTP的报文结构:

         HTTP有两类报文:

                   ①请求报文——从客户向服务器发送请求报文

                   ②响应报文——从服务器到客户的回答

          HTTP是面向文本的,因此在报文中的每一个字段都是一些字符串,因而各个字段的长度都是不确定的。

HTTP的连接方式:

connection:keep-alive               长连接:连接保持一定时间

connection:close                        短链接:立即断开连接

(3)爬虫

#include "head.h"#define SIN_PORT 80
#define SIN_ADDR "219.144.82.95"int create_tcp_connect()
{int sockfd = socket(AF_INET, SOCK_STREAM, 0);if(sockfd < 0){perror("socket error");return -1;}struct sockaddr_in seraddr;seraddr.sin_family = AF_INET;seraddr.sin_port = htons(SIN_PORT);seraddr.sin_addr.s_addr = inet_addr(SIN_ADDR);int ret = connect(sockfd,(struct sockaddr *)&seraddr, sizeof(seraddr));if(ret < 0){perror("connet error");return -1;}return sockfd;
}int send_http_request(int sockfd)
{char *p = "GET / HTTP/1.1\r\n""Host: news.sohu.com\r\n""User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0\r\n""Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n""Accept-Language: en-US,en;q=0.5\r\n""Connection: close\r\n""Upgrade-Insecure-Requests: 1\r\n""\r\n";ssize_t cnt = send(sockfd, p, strlen(p), 0);if(cnt < 0){perror("send error");return -1;}return 0;
}int recv_http_response(int sockfd)
{char buff[1024] = {0};while (1){ssize_t cnt = recv(sockfd, buff, sizeof(buff), 0);if(cnt < 0){perror("recv error");return -1;}if(0 == cnt){printf("server close");break;}write(1, buff, cnt);}}int main(int argc, char const *argv[])
{int sockfd = create_tcp_connect();if(sockfd < 0){return -1;}send_http_request(sockfd);recv_http_response(sockfd);close(sockfd);return 0;
}

http://www.xdnf.cn/news/1365769.html

相关文章:

  • zookeeper-znode解析
  • 【动态规划】309. 买卖股票的最佳时机含冷冻期及动态规划模板
  • 深入浅出 ArrayList:从基础用法到底层原理的全面解析(中)
  • 【C语言16天强化训练】从基础入门到进阶:Day 11
  • 信号处理的核心机制:从保存、处理到可重入性与volatile
  • 系统架构设计师-计算机系统存储管理的模拟题
  • 【数据结构】栈和队列——队列
  • AR远程协助:能源电力行业智能化革新
  • 数据库迁移幂等性介绍(Idempotence)(Flyway、Liquibase)ALTER、ON DUPLICATE
  • 05 开发环境和远程仓库Gitlab准备
  • coze工作流200+源码,涵盖AI文案生成、图像处理、视频生成、自动化脚本等多个领域
  • 向量库Qdrant vs Milvus 系统详细对比
  • 智能专网升级:4G与5G混合组网加速企业数字化转型
  • FunASR基础语音识别工具包
  • 【Canvas与标牌】维兰德汤谷公司logo
  • JavaScript 中类(class)的super 关键字
  • 【YOLOv5部署至RK3588】模型训练→转换RKNN→开发板部署
  • UniApp文件上传大小限制问题解决方案
  • kafka 副本集设置和理解
  • kafka常用命令
  • 宋红康 JVM 笔记 Day07|本地方法接口、本地方法栈
  • Linux(四):进程状态
  • python项目中pyproject.toml是做什么用的
  • SDC命令详解:使用set_timing_derate命令进行约束
  • K8s高可用:Master与候选节点核心解析
  • 基于MalConv的恶意软件检测系统设计与实现
  • 力扣(用队列实现栈)
  • SSH 反向隧道:快速解决服务器网络限制
  • 蜗牛播放器 Android TV:解决大屏观影痛点的利器
  • 【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图