C语言实现GET请求:示例代码及注释
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()函数用于关闭套接字。
原文地址: https://www.cveoy.top/t/topic/l48E 著作权归作者所有。请勿转载和采集!