当前位置: 首页 > 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.dtcms.com/a/350599.html

相关文章:

  • 插曲 - 为什么光速不变
  • 【代码】洛谷P3391 【模板】文艺平衡树(FHQ Treap)
  • 低质量视频变高清AI:告别模糊,重现清晰画质
  • chrome插件开发(二)
  • vue家教预约平台设计与实现(代码+数据库+LW)
  • 驱动-热插拔-Netlink广播监听内核状态
  • HarmonyOS实战(DevEco AI篇)—CodeGenie + DeepSeek构建鸿蒙开发的超级外挂工作流
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十九)子窗口
  • 您的连接不是私密连接问题解决
  • 借Copilot之力,实现办公效率的跃升
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_索引和视图
  • 软件使用教程(二):VS Code的Copilot、Git设置与使用
  • 复制和下载飞书文档的方法教程
  • Unity开发如何实现换装技术
  • Ubuntu 14.10 i386桌面版安装教程(U盘启动详细步骤-附安装包下载)​
  • LeetCode 100题(3)(10题)
  • 实用电脑小工具分享,守护电脑隐私与提升效率21/64
  • CANopen - DCF(Device Configuration File) 介绍
  • 平安产险青海分公司助力国家电投黄河公司安全生产
  • 2024鸿蒙样题需要掌握的知识点
  • Shopify 集合页实现自定义广告位插入(支持分页)
  • C++ 指针与引用面试深度解析
  • k8s数据存储
  • PMP项目管理知识点-④ 项⽬整合管理
  • 3-2.Python 函数 - None(None 概述、None 应用场景)
  • Flink的CheckPoint与SavePoint
  • 使用 Prometheus 监控服务器节点:Node Exporter 详解与配置
  • 【2025】政策变动
  • 从认识Docker到安装
  • 深分页实战