linux C发送 http 请求

本文详细介绍了如何使用C语言通过socket编程实现向指定服务器发送HTTP请求并接收响应的过程,包括连接建立、发送请求行、头部信息及请求主体,以及响应接收与关闭连接的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*****************************************************************/
/*********** 程序名称:get_http.c ********************************/
/*********** 功能:向固定地址发起请求得到返回页面字符 ************/
/*********** ***********************************************************/
/***************************** ** *************************************/
/*****************************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>


int htconnect(char *host, int port){
        int white_sock;
        struct hostent * site;
        struct sockaddr_in me;
        site = gethostbyname(host);
        if (site==NULL) return -2;
        white_sock = socket(AF_INET,SOCK_STREAM,0);
        if (white_sock <0) return -1;
        memset(&me, 0, sizeof(struct sockaddr_in));
        memcpy(&me.sin_addr, site-> h_addr_list[0], site-> h_length);
        me.sin_family = AF_INET;
        me.sin_port = htons(port);
        return (connect(white_sock, (struct sockaddr *)&me,sizeof(struct sockaddr)) <0) ? -1 : white_sock;
}

int htsend(int sock, char *fmt, ...){
        char BUF[1024];
        va_list argptr;
        va_start(argptr,fmt);
        vsprintf(BUF,fmt,argptr);
        va_end(argptr);
        //printf(BUF);  //回显
        //printf("-->%s<--\n",BUF);
        return send(sock,BUF,strlen(BUF),0);
}


int main(int argc,char **argv){
        int black_sock;
        int M,N;
        char bugs_bunny[3];
        if (argc<2){
                printf( "Please input the hostName. Example:\n %s www.sohu.com\n ",argv[0]);
                return;
        }
        black_sock = htconnect(argv[1],80);
        if (black_sock <1) return;

        printf("循环发送请求开始\n");
        printf("......\n");
        M=1;N=1;
        while (N==1){
                if(M % 1000 == 0){printf("当前循环次数:%d \n",M);      }
                if(M == 1000000){break;}
                htsend(black_sock, "GET / HTTP/1.0\n");
                htsend(black_sock, "Host: %s\n", argv[1]);
                htsend(black_sock, "\n");
                //htsend(black_sock, "%c ", 10);
                M++;
        }
        printf("循环发送请求 %d 次\n",M);

        printf("收到信息Start:---->\n");
        //while (read(black_sock, bugs_bunny, 1)> 0){
        //      printf( "%c",bugs_bunny[0]);
        //}
        printf( "收到信息End.<----\n ");
        close(black_sock);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值