c语言 用socket发送post请求 写一段示列
时间: 2023-05-20 16:04:52 浏览: 109
以下是一个使用C语言的socket发送POST请求的示例代码:
```c
#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 = "example.com";
char *path = "/post";
char *data = "key1=value1&key2=value2";
char *content_type = "application/x-www-form-urlencoded";
char *method = "POST";
int port = 80;
// 创建socket
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
perror("socket");
exit(1);
}
// 获取服务器IP地址
struct hostent *he = gethostbyname(host);
if (he == NULL) {
perror("gethostbyname");
exit(1);
}
// 设置服务器地址
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr = *((struct in_addr *)he->h_addr);
// 连接服务器
if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) {
perror("connect");
exit(1);
}
// 构造HTTP请求头和请求体
char request[1024];
sprintf(request, "%s %s HTTP/1.1\r\n"
"Host: %s\r\n"
"Content-Type: %s\r\n"
"Content-Length: %d\r\n"
"\r\n"
"%s",
method, path, host, content_type, strlen(data), data);
// 发送HTTP请求
if (send(sock, request, strlen(request), 0) == -1) {
perror("send");
exit(1);
}
// 接收HTTP响应
char response[1024];
int len = recv(sock, response, sizeof(response), 0);
if (len == -1) {
perror("recv");
exit(1);
}
response[len] = '\0';
// 输出HTTP响应
printf("%s\n", response);
// 关闭socket
close(sock);
return 0;
}
```
这段代码可以向指定的服务器发送一个POST请求,并输出服务器返回的响应。其中,`host`、`path`、`data`、`content_type`、`method`和`port`分别表示服务器的主机名、请求路径、请求体、请求体的类型、请求方法和服务器的端口号。你可以根据自己的需要修改这些参数。
阅读全文