找回密码
 立即注册
首页 业界区 安全 HTTP协议的应用

HTTP协议的应用

港髁 2025-6-11 16:03:19
HTTP协议的应用

HTTP协议也称为超文本传输协议(Hypertext [Transfer Protocol](https://baike.baidu.com/item/Transfer Protocol/612755?fromModule=lemma_inlink))是一个简单的基于请求-响应的协议,它通常运行在TCP之上,所以属于应用层协议。
浏览器基本都是基于该协议与服务器通信的,HTTP是基于 TCP/IP 协议来传输数据的,超文本的意思是指HTTP协议不只是支持普通数据,还支持传输文件、图片以及具有超链接功能。

  • 请求行   *\r\n*   第一部分
  • 头部字段1 *\r\n*   第二部分
  • 头部字段2 *\r\n*
  • *\r\n*     第三部分
  • 请求包体  *\r\n*  第四部分
请求行 GET/POST SP URL SP HTTP/1.1\r\n
客户端必须指定Host字段:  Host :  主机域名  \r\n  比如  “Host: www.baidu.com\r\n”
练习:获取天气信息,可以使用企业提供的天气API接口,比如比较知名的天气相关的API有心知天气,一般需要用户注册平台账号,然后进行个人认证、认证成功之后可以创建应用,得到应用对应的密钥,再通过密钥区访问API接口。
  1. #include <sys/socket.h>
  2. #include <netinet/in.h>
  3. #include
  4. #include <stdio.h>
  5. #include <errno.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <netinet/ip.h>
  9. #include
  10. #include <sys/socket.h>
  11. #include <netinet/in.h>
  12. #include <netinet/udp.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #include <sys/types.h>
  16. #include <unistd.h>
  17. //TCP客户端代码   ./xxx   port  IP
  18. #define PORT 80
  19. #define IPADDR "116.62.81.138"
  20. #define KEY "Sv87YPoLRn3skQ9hO"
  21. int main(int argc, char const *argv[])
  22. {
  23.         //1.创建TCP套接字
  24.         int tcp_socket = socket(AF_INET, SOCK_STREAM, 0);
  25.         if (tcp_socket == -1)
  26.         {
  27.                 fprintf(stderr, "tcp socket error,errno:%d,%s\n",errno,strerror(errno));
  28.                 exit(1);
  29.         }
  30.        
  31.         //4.发起连接请求,等待接受服务器接受连接
  32.         struct sockaddr_in  dest_addr;
  33.         dest_addr.sin_family                 = AF_INET;                                                 //协议族,是固定的
  34.         dest_addr.sin_port                   = htons(PORT);                        //服务器端口,必须转换为网络字节序
  35.         dest_addr.sin_addr.s_addr   = inet_addr(IPADDR);                        //服务器地址 "192.168.64.xxx"  
  36.         int ret = connect(tcp_socket,(struct sockaddr *)&dest_addr,sizeof(dest_addr));
  37.         if (ret < 0)
  38.         {
  39.                 fprintf(stderr, "connect error,errno:%d,%s\n",errno,strerror(errno));
  40.                 exit(1);
  41.         }
  42.     //用于存储HTTP的请求内容 请求行 请求方法 sp url sp HTTP\1.1 \r\n
  43.     char reqbuf[512] = {0};
  44.     sprintf(reqbuf,"GET https://api.seniverse.com/v3/weather/now.json?key=%s&location=beijing&language=zh-Hans&unit=c "
  45.                                 "HTTP/1.1 "
  46.                                 "\r\n"
  47.                                 "Host:www.api.seniverse.com\r\n"
  48.                                 "\r\n"
  49.                             ,KEY);
  50.         //5.说明双方建立连接,此时可以接收数据
  51.     char recvbuf[1024]={0};
  52.         while(1)
  53.         {
  54.         send(tcp_socket,reqbuf,strlen(reqbuf),0);
  55.                 recv(tcp_socket,recvbuf,sizeof(recvbuf),0);
  56.                 printf("%s\n",recvbuf);
  57.                 bzero(recvbuf,sizeof(recvbuf));
  58.                 recv(tcp_socket,recvbuf,sizeof(recvbuf),0);
  59.         printf("%s\n",recvbuf);
  60.                 bzero(recvbuf,sizeof(recvbuf));
  61.         sleep(5);
  62.         }
  63.         return 0;
  64. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册