找回密码
 立即注册
首页 业界区 科技 HTTP-获取天气

HTTP-获取天气

墨佳美 2025-6-8 11:57:59
使用http协议从心知天气获取天气信息,并将获取到的温度信息转换成整型格式
  1. /**************************************************************************
  2. *
  3. * 设计http程序,客户端向心知天气发送获取天气的请求,并解析出收到的温度数据
  4. * author:jindouliu2024@163.com
  5. * date:2025.5.20
  6. *
  7. *                   
  8. *
  9. * Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
  10. * *************************************************************************/
  11. #include<stdio.h>
  12. #include<time.h>
  13. #include <unistd.h>
  14. #include<string.h>
  15. #include<errno.h>
  16. #include<stdlib.h>
  17. #include
  18. #include <unistd.h>
  19. #include<netinet/udp.h>
  20. #include<sys/socket.h>
  21. #include<netinet/in.h>
  22. #include <pthread.h>
  23. #define PORT  80
  24. #define IP   "116.62.81.138"
  25. #define KEY "      "
  26. #define LOCAL "beijing"
  27. int main(int argc,char *argv[])
  28. {
  29.         char buf[512] = {0};
  30.         char rcvbuf[512] = {0};
  31.         char *p = NULL;
  32.         int temp = 0;
  33.         //创建套接字文件
  34.         int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
  35.         if(socket_fd == -1){
  36.                 fprintf(stderr,"socket error errno:%d,%s",errno,strerror(errno));
  37.                 return 1;
  38.         }
  39.         //绑定服务器的端口和地址
  40.         struct sockaddr_in server;
  41.         server.sin_family = AF_INET;
  42.         server.sin_port = htons(PORT);
  43.         server.sin_addr.s_addr = inet_addr(IP);
  44.        
  45.         //申请连接
  46.         int flag = connect(socket_fd,(struct sockaddr *)&server,sizeof(server));
  47.         if(flag == -1){
  48.                 fprintf(stderr,"connect error errno:%d,%s",errno,strerror(errno));
  49.                 return 1;
  50.         }
  51.        
  52.         //HTTP协议格式
  53.         sprintf(buf,"GET https://api.seniverse.com/v3/weather/now.json?key=%s&location=%s&language=zh-Hans&unit=c "
  54.                 "HTTP/1.1\r\n"
  55.                 "Host:api.seniverse.com\r\n"
  56.                 "\r\n",KEY,LOCAL);
  57.         //双方建立连接
  58.         send(socket_fd,buf,strlen(buf),0);
  59.         //等待服务器响应
  60.        
  61.        
  62.         //接收到响应行和相应字段
  63.         recv(socket_fd,rcvbuf,sizeof(rcvbuf),0);
  64.         printf("%s",rcvbuf);
  65.         bzero(rcvbuf,sizeof(rcvbuf));
  66.         //接受到的响应包体
  67.         recv(socket_fd,rcvbuf,sizeof(rcvbuf),0);
  68.         printf("%s\n",rcvbuf);
  69.         //切割字符串,找到天气数据的子串的地址
  70.         p = strstr(rcvbuf,"temperature");
  71.         p = strtok(p,"}");
  72.         p = strtok(p,":");
  73.         p = strtok(NULL,":");//  "28"
  74.         p +=1;
  75.         p = strtok(p,""");
  76.         //将字符串形式的数据转换成整型
  77.         temp = atoi(p);
  78.         printf("\n%d\n",temp);
  79.         close(socket_fd);
  80.         return 0;
  81.        
  82. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册