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 著作权归作者所有。请勿转载和采集!