用c语言怎么向网址发送gat请求举例的代码加注释
以下是使用C语言向网址发送GET请求的代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>
#define MAX_BUFFER_SIZE 1024
int main(int argc, char **argv) {
int sockfd;
struct sockaddr_in server_addr;
struct hostent *server;
char *host = "www.example.com";
char *page = "/index.html";
char buffer[MAX_BUFFER_SIZE];
int port = 80;
int bytes_sent, bytes_received;
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("Failed to create socket");
exit(EXIT_FAILURE);
}
// 通过主机名获取IP地址
server = gethostbyname(host);
if (server == NULL) {
fprintf(stderr, "ERROR, no such host\n");
exit(EXIT_FAILURE);
}
// 初始化服务器地址结构体
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
memcpy(&server_addr.sin_addr.s_addr, server->h_addr, server->h_length);
server_addr.sin_port = htons(port);
// 连接到服务器
if (connect(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0) {
perror("Failed to connect to server");
exit(EXIT_FAILURE);
}
// 构造GET请求
sprintf(buffer, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", page, host);
// 发送GET请求到服务器
bytes_sent = send(sockfd, buffer, strlen(buffer), 0);
if (bytes_sent < 0) {
perror("Failed to send request to server");
exit(EXIT_FAILURE);
}
// 接收服务器响应
while ((bytes_received = recv(sockfd, buffer, MAX_BUFFER_SIZE - 1, 0)) > 0) {
buffer[bytes_received] = '\0';
printf("%s", buffer);
}
// 关闭套接字
close(sockfd);
return 0;
}
代码注释:
#include头文件用于引入相关的库和函数。#define定义了一个宏变量MAX_BUFFER_SIZE,用于存储接收到的最大数据大小。int main(int argc, char **argv)是程序的入口函数。int sockfd;创建一个套接字描述符,用于存储套接字的标识符。struct sockaddr_in server_addr;定义了一个用于存储服务器地址的结构体。struct hostent *server;定义了一个用于存储主机信息的结构体指针。char *host = "www.example.com";定义了服务器主机名。char *page = "/index.html";定义了要请求的页面。char buffer[MAX_BUFFER_SIZE];定义了一个用于存储响应数据的缓冲区。int port = 80;定义了服务器端口号。int bytes_sent, bytes_received;定义了发送和接收的字节数。sockfd = socket(AF_INET, SOCK_STREAM, 0);创建一个TCP套接字。server = gethostbyname(host);通过主机名获取IP地址。memset(&server_addr, 0, sizeof(server_addr));将server_addr结构体清空。memcpy(&server_addr.sin_addr.s_addr, server->h_addr, server->h_length);将主机IP地址复制到server_addr结构体。server_addr.sin_port = htons(port);设置服务器端口号。if (connect(sockfd, (struct sockaddr *) &server_addr, sizeof(server_addr)) < 0)建立与服务器的连接。sprintf(buffer, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", page, host);构造GET请求。bytes_sent = send(sockfd, buffer, strlen(buffer), 0);发送GET请求到服务器。while ((bytes_received = recv(sockfd, buffer, MAX_BUFFER_SIZE - 1, 0)) > 0)接收服务器响应。close(sockfd);关闭套接字。return 0;返回程序执行结果。
原文地址: https://www.cveoy.top/t/topic/M8q 著作权归作者所有。请勿转载和采集!