HTTP-获取天气

使用http协议从心知天气获取天气信息,并将获取到的温度信息转换成整型格式

/**************************************************************************
*
* 设计http程序,客户端向心知天气发送获取天气的请求,并解析出收到的温度数据
* author:jindouliu2024@163.com 
* date:2025.5.20
*
* 		  
*
* Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
* *************************************************************************/

#include<stdio.h>
#include<time.h>
#include <unistd.h>
#include<string.h>
#include<errno.h>
#include<stdlib.h>
#include<arpa/inet.h>
#include <unistd.h>
#include<netinet/udp.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <pthread.h>

#define PORT  80
#define IP   "116.62.81.138"
#define KEY "      "
#define LOCAL "beijing"

int main(int argc,char *argv[])
{
	char buf[512] = {0};
	char rcvbuf[512] = {0};
	char *p = NULL;
	int temp = 0;
	//创建套接字文件
	int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
	if(socket_fd == -1){
		fprintf(stderr,"socket error errno:%d,%s",errno,strerror(errno));
		return 1;
	}
	//绑定服务器的端口和地址
	struct sockaddr_in server;
	server.sin_family = AF_INET;
	server.sin_port = htons(PORT);
	server.sin_addr.s_addr = inet_addr(IP);
	
	//申请连接
	int flag = connect(socket_fd,(struct sockaddr *)&server,sizeof(server));
	if(flag == -1){
		fprintf(stderr,"connect error errno:%d,%s",errno,strerror(errno));
		return 1;
	}
	
	//HTTP协议格式
	sprintf(buf,"GET https://api.seniverse.com/v3/weather/now.json?key=%s&location=%s&language=zh-Hans&unit=c "
		"HTTP/1.1\r\n"
		"Host:api.seniverse.com\r\n"
		"\r\n",KEY,LOCAL);
	//双方建立连接
	send(socket_fd,buf,strlen(buf),0);
	//等待服务器响应
	
	
	//接收到响应行和相应字段
	recv(socket_fd,rcvbuf,sizeof(rcvbuf),0);
	printf("%s",rcvbuf);
	bzero(rcvbuf,sizeof(rcvbuf));
	//接受到的响应包体
	recv(socket_fd,rcvbuf,sizeof(rcvbuf),0);
	printf("%s\n",rcvbuf);
	//切割字符串,找到天气数据的子串的地址
	p = strstr(rcvbuf,"temperature");
	p = strtok(p,"}");
	p = strtok(p,":");
	p = strtok(NULL,":");//  "28"
	p +=1;
	p = strtok(p,"\"");
	//将字符串形式的数据转换成整型
	temp = atoi(p);
	printf("\n%d\n",temp);
	close(socket_fd);
	return 0;
	
}
posted @ 2025-05-20 19:20  LRadian  阅读(36)  评论(0)    收藏  举报