C发送http请求

#include <stdio.h>  
#include <string.h>  
#include <sys/socket.h>  
#include <arpa/inet.h>  
#include <unistd.h>  
#include <netinet/in.h>  
#include <stdlib.h>  
  
#define MAXLINE 1024  
  
int main()  
{  
    int sockfd,n;  
    char recvline[MAXLINE];  
    struct sockaddr_in servaddr;  
    char dns[32];  
    char url[128];  
    char *IP = "218.244.133.30";  
    char *buf = "GET /forum.php HTTP/1.1\r\n\  
Host: 218.244.133.30\r\n\  
Proxy-Connection: keep-alive\r\n\  
Cache-Control: max-age=0\r\n\  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n\  
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36\r\n\  
Accept-Encoding: gzip,deflate,sdch\r\n\  
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6\r\n\  
Cookie: P52Q_2132_saltkey=M99iR1So; P52Q_2132_lastvisit=1402616897; P52Q_2132_nofavfid=1; P52Q_2132_visitedfid=2D41D38; P52Q_2132_ulastactivity=63e8Um91gzrgSl71VxWDURz5puThdraSkMWMi3yotj2QHi7O95z5; P52Q_2132_lastcheckfeed=2%7C1404624305; P52Q_2132_editormode_e=1; P52Q_2132_smile=2D1; P52Q_2132_st_t=0%7C1404692476%7Cf1fb107592d1e4dabffd9e8cc052c9bc; P52Q_2132_forum_lastvisit=D_41_1404310798D_2_1404692476; P52Q_2132_seccode=121.8807c72fe7905a644e; P52Q_2132_st_p=0%7C1404692480%7C80767b97b5c8a3d320ed9e0348d982cf; P52Q_2132_viewid=tid_76; P52Q_2132_sid=GQJqQ6; P52Q_2132_lastact=1404693952%09forum.php%09ajax\r\n\  
\r\n";  
    if((sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0)  
        printf("socket error\n");  
    printf("1\n");  
    bzero(&servaddr,sizeof(servaddr));  
    servaddr.sin_family = AF_INET;  
    servaddr.sin_port = htons(80);  
    if(inet_pton(AF_INET,IP,&servaddr.sin_addr) <= 0)  
        printf("inet_pton error\n");  
    if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) < 0)  
        printf("connect error\n");  
    write(sockfd,buf,strlen(buf));  
    printf("%s\n\n",buf);  
    while((n = read(sockfd,recvline,MAXLINE)) > 0)  
    {  
        recvline[n] = 0;  
        if(fputs(recvline,stdout) == EOF)  
            printf("fputs error\n");  
    }  
    if(n < 0)  
        printf("read error\n");  
    printf("all ok now\n");  
    exit(0);  
}  

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用C语言发送HTTP请求的示例代码: ```c #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[]) { struct sockaddr_in server_addr; struct hostent *server; int socket_fd, port_number, bytes, sent, received, total; char buffer[MAX_BUFFER_SIZE], request[MAX_BUFFER_SIZE]; if (argc < 3) { fprintf(stderr, "Usage: %s <hostname> <port_number> <path>\n", argv[0]); exit(1); } port_number = atoi(argv[2]); /* 创建 socket */ socket_fd = socket(AF_INET, SOCK_STREAM, 0); if (socket_fd < 0) { perror("Failed to create socket"); exit(1); } /* 获取服务器信息 */ server = gethostbyname(argv[1]); if (server == NULL) { fprintf(stderr, "Failed to get host by name"); exit(1); } /* 初始化服务器地址结构 */ memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port_number); memcpy(&server_addr.sin_addr.s_addr, server->h_addr, server->h_length); /* 连接服务器 */ if (connect(socket_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("Failed to connect to server"); exit(1); } /* 构造 HTTP 请求 */ sprintf(request, "GET %s HTTP/1.1\r\nHost: %s:%d\r\nConnection: close\r\n\r\n", argv[3], argv[1], port_number); /* 发送 HTTP 请求 */ total = strlen(request); sent = 0; do { bytes = write(socket_fd, request + sent, total - sent); if (bytes < 0) { perror("Failed to send request"); exit(1); } if (bytes == 0) { break; } sent += bytes; } while (sent < total); /* 接收 HTTP 响应 */ memset(buffer, 0, sizeof(buffer)); received = 0; do { bytes = read(socket_fd, buffer + received, MAX_BUFFER_SIZE - received); if (bytes < 0) { perror("Failed to receive response"); exit(1); } if (bytes == 0) { break; } received += bytes; } while (received < MAX_BUFFER_SIZE); /* 输出 HTTP 响应 */ printf("%s\n", buffer); /* 关闭 socket */ close(socket_fd); return 0; } ``` 你可以将以上代码保存到一个名为 `http_request.c` 的文件中,并使用以下命令编译: ``` gcc http_request.c -o http_request ``` 然后在终端中运行以下命令来发送 HTTP 请求: ``` ./http_request example.com 80 / ``` 其中,`example.com` 是要请求的网站的域名,`80` 是要连接的端口号,`/` 是要请求的路径。你可以根据需要修改这些参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值