C语言实现GET请求:示例代码及注释

以下是一个简单的通过 C 语言向网址发送 GET 请求的示例代码,注释已经加上:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h>

int main(int argc, char *argv[]) {
    char *host = 'www.example.com'; // 目标网址
    char *path = '/';               // 请求的路径
    int port = 80;                  // 目标端口号
    struct sockaddr_in server;
    struct hostent *hp;
    char message[1024] = {0};
    int sock, bytes_sent, bytes_recv;
    char server_reply[4096] = {0};

    // 创建套接字
    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sock == -1) {
        printf('Could not create socket');
        return 1;
    }

    // 获取目标 IP 地址
    hp = gethostbyname(host);
    if (hp == NULL) {
        printf('Could not resolve hostname');
        return 1;
    }

    // 设置目标服务器的地址信息
    memset(&server, 0, sizeof(server));
    server.sin_family = AF_INET;
    memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
    server.sin_port = htons(port);

    // 连接目标服务器
    if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) {
        printf('Connect error');
        return 1;
    }

    // 构造 GET 请求消息
    sprintf(message, 'GET %s HTTP/1.1\r\nHost: %s\r\n\r\n', path, host);

    // 发送 GET 请求消息
    bytes_sent = send(sock, message, strlen(message), 0);
    if (bytes_sent < 0) {
        printf('Send failed');
        return 1;
    }

    // 接收服务器响应消息
    bytes_recv = recv(sock, server_reply, sizeof(server_reply), 0);
    if (bytes_recv < 0) {
        printf('Recv failed');
        return 1;
    }

    // 输出服务器响应消息
    printf('%s', server_reply);

    // 关闭套接字
    close(sock);

    return 0;
}

这段代码会向 www.example.com 发送一个 GET 请求,并打印出服务器的响应消息。其中:

  • socket() 函数用于创建套接字。
  • gethostbyname() 函数用于获取目标 IP 地址。
  • connect() 函数用于连接目标服务器。
  • send() 函数用于发送请求消息。
  • recv() 函数用于接收响应消息。
  • close() 函数用于关闭套接字。
C语言实现GET请求:示例代码及注释

原文地址: https://www.cveoy.top/t/topic/l48E 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录