墨佳美 发表于 2025-6-8 11:57:59

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
#include <unistd.h>
#include<netinet/udp.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <pthread.h>

#define PORT80
#define IP   "116.62.81.138"
#define KEY "      "
#define LOCAL "beijing"

int main(int argc,char *argv[])
{
        char buf = {0};
        char rcvbuf = {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;
       
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

嗳诿 发表于 2025-11-27 16:52:19

这个有用。

铜坠匍 发表于 2025-12-7 18:52:24

很好很强大我过来先占个楼 待编辑

高小雨 发表于 2025-12-27 11:40:46

热心回复!

堠秉 发表于 2026-1-1 14:46:11

前排留名,哈哈哈

辗振 发表于 2026-1-7 10:17:29

热心回复!

龙玮奇 发表于 2026-1-8 04:08:11

感谢发布原创作品,程序园因你更精彩

暴灵珊 发表于 2026-1-13 13:49:45

这个有用。

坪钗 发表于 2026-1-13 18:43:11

谢谢分享,辛苦了

赴忽 发表于 2026-1-15 14:00:34

新版吗?好像是停更了吧。

曲愍糙 发表于 2026-1-16 13:19:11

谢谢分享,辛苦了

阎逼 发表于 2026-1-17 08:46:40

感谢分享

姚梨素 发表于 2026-1-18 10:29:49

感谢分享,下载保存了,貌似很强大

愿隙 发表于 2026-1-21 13:58:06

用心讨论,共获提升!

哈梨尔 发表于 2026-1-23 08:04:29

不错,里面软件多更新就更好了

赶塑坠 发表于 2026-1-23 08:51:54

感谢分享

纣捎牟 发表于 2026-1-26 10:55:48

这个有用。

吟氅 发表于 7 天前

感谢发布原创作品,程序园因你更精彩

梢疠 发表于 6 天前

热心回复!

公新蕾 发表于 6 天前

不错,里面软件多更新就更好了
页: [1] 2
查看完整版本: HTTP-获取天气