嵌入式(day34) http协议
WWW: 万维网
1. 万维网服务器后台如何标记万维网数据 url:统一资源定位符
2. 万维网客户端与万维网服务器之间使用什么方式通信 HTTP:超文本传输协议
3. 万维网客户端如何展示请求的数据 HTML:超文本标记语言
url:统一资源定位符
<协议>://<主机>:<端口>/<路径>
https://www.baidu.com/
百度主页
https://www.baidu.com/s?wd=%E7%89%B9%E6%9C%97%E6%99%AE%E5%B0%94%E。。。。
HTTP:超文本传输协议
应用层协议
端口:80
备用端口:8080
基于传输层的TCP协议
HTTP请求报文:
爬虫示例
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* superset of previous */
#include <sys/types.h> /* See NOTES */
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h> #define SER_PORT 80
#define SER_IP "8.129.233.227"int creat_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(SER_PORT);seraddr.sin_addr.s_addr = inet_addr(SER_IP);int ret = connect(sockfd,(struct sockaddr *)&seraddr,sizeof(seraddr));if(ret < 0){perror("connect error");return -1;}return sockfd;}int send_http_request(int sockfd)
{char *preq = "GET /?app=weather.future&weaId=1&&appkey=77274&sign=131531661487c4bb25ebf37a8618bd51&format=json HTTP/1.1\r\n""Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\r\n""Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\r\n""Connection: keep-alive\r\n""Cookie: Hm_lvt_0519aa0e64028291465eb3dcd3f34a17=1756113086,1756132357; Hm_lpvt_0519aa0e64028291465eb3dcd3f34a17=1756132357; HMACCOUNT=BC89DCAA09A998BB\r\n""Host: api.k780.com\r\n""Upgrade-Insecure-Requests: 1\r\n""User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0\r\n""\r\n";ssize_t cnt = send(sockfd,preq,strlen(preq),0);if(cnt < 0){perror("send error");return -1;}