ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Liunx网络编程-应用层

Liunx网络编程-应用层 HTTP协议超文本传输协议基于传输层TCP协议端口80HTTPS SSL加密方式默认端口443curl库1. HTTP协议工作流程建立连接int init_tcp_clit() { int sockfd socket(AF_INET, SOCK_STREAM, 0); if (sockfd 0) { perror(socket); return -1; } struct sockaddr_in clit_addr; clit_addr.sin_family AF_INET; clit_addr.sin_port htons(PORT); clit_addr.sin_addr.s_addr inet_addr(IP); if (connect(sockfd, (struct sockaddr *)clit_addr, sizeof(clit_addr)) 0) { perror(connect); return -1; } return sockfd; }请求响应int send_http(int sockfd,char* city) { char buff[1024] {0}; char *preq GET /?appweather.todaycityNm; char *p appkey10003signb59bc3ef6191eb9f747dd4e83c99f2a4formatjson HTTP/1.1\r\n Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,image/apng,*/*;q0.8,application/signed-exchange;vb3;q0.7\r\n Accept-Language: zh-CN,zh;q0.9,en;q0.8,en-GB;q0.7,en-US;q0.6\r\n Connection: close\r\n Host: api.k780.com\r\n User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36 Edg/152.0.0.0\r\n \r\n; sprintf(buff, %s%s%s, preq, city, p); ssize_t size send(sockfd, buff, strlen(buff), 0); if (size 0) { perror(send); return -1; } return 0; }接收响应int recv_http(int sockfd) { int fd open(weather.txt, O_WRONLY | O_CREAT | O_TRUNC, 0664); if (fd 0) { perror(open); return -1; } char buf[1024] {0}; while (1) { ssize_t size recv(sockfd, buf, sizeof(buf), 0); if (size 0) { perror(recv); return -1; } else if (size 0) { printf(server close\n); break; } write(fd, buf, size); } close(fd); return 0; }解析JSONint parse_http_response(void) { int fd open(weather.txt, O_RDONLY); if (fd 0) { perror(open error); return -1; } long len lseek(fd, 0, SEEK_END); lseek(fd, 0, SEEK_SET); char *buff malloc(len1); if (NULL buff) { perror(malloc error); return -1; } memset(buff, 0, len1); read(fd, buff, len); close(fd); char *p strstr(buff, {); if (NULL p) { perror(strstr error); return -1; } printf(%s\n, p); cJSON *pjson cJSON_Parse(p); if (NULL pjson) { printf(cJSON_Parse error); return -1; } cJSON *pobj cJSON_GetObjectItem(pjson, success); if (NULL pobj) { printf(cJSON_GetObjectItem error success); return -1; } if (0 strcmp(pobj-valuestring, 1)) { pobj cJSON_GetObjectItem(pjson, result); if (NULL pobj) { printf(cJSON_GetObjectItem error result); return -1; } cJSON *pdata cJSON_GetObjectItem(pobj, citynm); printf(citynm : %s\n, pdata-valuestring); pdata cJSON_GetObjectItem(pobj, temperature); printf(temperature : %s\n, pdata-valuestring); pdata cJSON_GetObjectItem(pobj, weather); printf(weather : %s\n, pdata-valuestring); pdata cJSON_GetObjectItem(pobj, wind); printf(wind : %s\n, pdata-valuestring); } cJSON_Delete(pjson); return 0; }2. HTTP报文新闻http请求报文GET / HTTP/1.1\r\n /表示主页Host: news.sohu.com\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101Firefox/113.0\r\nAccept:text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,*/*;q0.8Accept-Language: en-US,en;q0.5\r\nConnection: keep-alive\r\n\r\nConnection:keep-alive: 长连接HTTP通信结束保持一定时间的连接再断开close短连接HTTP通信结束立马断开连接HTTP响应报文HTTP/1.1 200 OK\r\nDate: Wed, 02 Sep 2026 06:31:29 GMT\r\nContent-Type: text/html;charsetutf-8\r\nServer: openrestyVary: Accept-EncodingVary: OriginVary: Access-Control-Request-MethodVary: Access-Control-Request-HeadersSet-Cookie: SUV1788330689823odinzX9W; Path/; Domainsohu.com; Max-Age946080000; ExpiresFri, 25 Aug 2056 06:31:29 GMT; Secure; SameSiteNoneTrace-Id: a067a38f132249f8a173162c956fc468.88701.17883306898232510Data-Source:X-Content-Type-Options: nosniffX-XSS-Protection: 0S-REQ-ID: 12342245799539308391S-REQ-TYPE: 0X-Cache-Lookup: Cache MissContent-Encoding: gzipCache-Control: no-cacheTransfer-Encoding: chunkedX-NWS-LOG-UUID: 12342245799539308391\r\nConnection: keep-alive\r\nX-Cache-Lookup: Cache Miss\r\n\r\n!DOCTYPE htmlhtml langzh-CNheadscriptif(windowwindow.performancetypeofwindow.performance.nowfunction){
返回列表