美文网首页
2020-05-06

2020-05-06

作者: 今年三十 | 来源:发表于2020-05-06 02:50 被阅读0次

用c语言实现http请求

用c语言来实现一个简单的http请求,请求 www.cnblogs.com 首页

···

include<stdio.h>

include<stdlib.h>

include<string.h> //strlen

include<sys/socket.h>

include<arpa/inet.h> //inet_addr

include<netdb.h>

include<errno.h>

int main(int argc, char *argv[])
{
int socket_desc;
struct sockaddr_in server;
char *message;

//Create socket
socket_desc = socket(AF_INET, SOCK_STREAM , 0);
if (socket_desc == -1) {
    printf("Could not create socket");
}

char ip[20] = {0};
char *hostname = "www.cnblogs.com";
struct hostent *hp;
if ((hp = gethostbyname(hostname)) == NULL) {
    return 1;
}

strcpy(ip, inet_ntoa(*(struct in_addr *)hp->h_addr_list[0]));

server.sin_addr.s_addr = inet_addr(ip);
server.sin_family = AF_INET;
server.sin_port = htons(80);


//Connect to remote server
if (connect(socket_desc, (struct sockaddr *)&server, sizeof(server)) < 0) {
    printf("connect error: %s", errno);
    return 1;
}

puts("Connected\n");

//Send some data
//http 协议
message = "GET / HTTP/1.1\r\nHost: www.cnblogs.com\r\n\r\n";

//向服务器发送数据
if (send(socket_desc, message, strlen(message) , 0) < 0) {
    puts("Send failed");
    return 1;
}
puts("Data Send\n");

struct timeval timeout = {3, 0};
setsockopt(socket_desc, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(struct timeval));

//Receive a reply from the server
//loop
int size_recv, total_size = 0;
char chunk[512];
while(1) {
    memset(chunk , 0 , 512); //clear the variable
    //获取数据
    if ((size_recv =  recv(socket_desc, chunk, 512, 0) ) == -1) {
        if (errno == EWOULDBLOCK || errno == EAGAIN) {
            printf("recv timeout ...\n");
            break;
        } else if (errno == EINTR) {
            printf("interrupt by signal...\n");
            continue;
        } else if (errno == ENOENT) {
            printf("recv RST segement...\n");
            break;
        } else {
            printf("unknown error: %d\n", errno);
            exit(1);
        }
    } else if (size_recv == 0) {
        printf("peer closed ...\n");
        break;
    } else {
        total_size += size_recv;
        printf("%s" , chunk);
    }
}

printf("Reply received, total_size = %d bytes\n", total_size);
return 0;

}
···

相关文章

  • 2020-05-07

    2020-05-06 2020-05-06 成长日志第321天 家名:温暖有爱之家 家规:真诚待人不自欺,学会看见...

  • MassMotion sdk的使用

    2020-05-06 直接用VS 以MassMotion sdk 官方examples为例(sdk下载好后在安装文...

  • 【每日分享】2020-05-06 关于习惯(4)之方法1

    【每日分享】2020-05-06 关于习惯(4)之方法1 之前只给看鸡汤,没配勺子(工具,方法)今天来点干货,可以...

  • 【D134】拆解优质文案案例——写作营共读打卡第101天《爆款文

    2020-05-06,周三,晴 今天阅读《爆款文案》。 Day101-《拆解优质文案案例》 ——写作营第101天共...

  • 2020-05-06

    《杀手职责》 第一章-吐槽我的语言 晓道士接稿 字数 339 · 阅读 0 2020-05-06 22:45 我...

  • Unity2019导出地形terrain为obj

    2020-05-06我的unity版本是2019用这个方法可以导出普通物体甚至人物模型,但无法正常导出terrai...

  • 断舍离NO.171

    2020-05-06 星期三 晴 断舍离NO.171 人生是一个不断做减法的过程,当你不会舍弃一些东西...

  • 模拟/收到的金句

    练车第十三天 2020-05-06 指导员语录: ️好事多磨。 ️欲速则不达。 【1.考试车练习】 1/2的侧方位...

  • 换个城市生活

    2020-05-06 最近因着工作的不顺心,产生了离职的想法,老实说,离职这个想法是去年就已经在心里产生了。至于原...

  • 几种最常见的网站盈利模式分析

    原创 甜力怕 2020-05-06 盈利化似乎是网站必须要经历的一条路,很多网站的建设本身就是奔着盈利而去的,...

网友评论

      本文标题:2020-05-06

      本文链接:https://www.haomeiwen.com/subject/jygbghtx.html