用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 , );
if (socket_desc == -) {
printf("Could not create socket");
} char ip[] = {};
char *hostname = "www.cnblogs.com";
struct hostent *hp;
if ((hp = gethostbyname(hostname)) == NULL) {
return ;
} strcpy(ip, inet_ntoa(*(struct in_addr *)hp->h_addr_list[])); server.sin_addr.s_addr = inet_addr(ip);
server.sin_family = AF_INET;
server.sin_port = htons(); //Connect to remote server
if (connect(socket_desc, (struct sockaddr *)&server, sizeof(server)) < ) {
printf("connect error: %s", errno);
return ;
} 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) , ) < ) {
puts("Send failed");
return ;
}
puts("Data Send\n"); struct timeval timeout = {, };
setsockopt(socket_desc, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(struct timeval)); //Receive a reply from the server
//loop
int size_recv, total_size = ;
char chunk[];
while() {
memset(chunk , , ); //clear the variable
//获取数据
if ((size_recv = recv(socket_desc, chunk, , ) ) == -) {
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();
}
} else if (size_recv == ) {
printf("peer closed ...\n");
break;
} else {
total_size += size_recv;
printf("%s" , chunk);
}
} printf("Reply received, total_size = %d bytes\n", total_size);
return ;
}

编译:

gcc http.c -o http

运行:

./http

就可以看到返回结果了

用c语言实现http请求的更多相关文章

  1. [日常] 跨语言的POST请求问题的解决

    部门对外提供了一个HTTP的POST接口,但是对方公司的程序员使用C语言进行的调用,PHP这边一直无法获取到参数.遇到这种情况是因为对方没有完全按照HTTP协议中的POST发送数据.在HTTP头部分没 ...

  2. Linux套接子(c语言)模拟http请求、应答

    有关套接子和http请求报文的博客在CSDN有很多比如,点这里查看,这里我就不再做过多赘述了,下面我们直接实战,模拟http请求. 要求:浏览器访问本地的localhost,在浏览器页面打印出 Hel ...

  3. Http请求与响应格式

    原文:http://www.cnblogs.com/z941030/p/4699779.html Http协议对浏览器发出的Request格式以及对Web服务器发出的Response格式有具体的规定. ...

  4. JS实现多语言方式

    应用场景: 在不同移动平台(IOS,Android)上,建立一套与HTML页面通讯框架:主要业务逻辑使用HTML开发:想支持多语言开发. 动机: 通过主动发消息的方式,在页面完成初始化前,获取当前语言 ...

  5. ASP.NET Core多语言 (转载)

    ASP.NET Core中提供了一些本地化服务和中间件,可将网站本地化为不同的语言文化.ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实现 ...

  6. .NET Core多语言

    ASP.NET Core中提供了一些本地化服务和中间件,可将网站本地化为不同的语言文化. ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实 ...

  7. Spring MVC 多语言化的实践和学习

    一.主要参考: SpringMVC简单实现国际化/多语言 - CSDN博客 https://blog.csdn.net/u013360850/article/details/70860144/ 二.总 ...

  8. Http请求和响应

    Http请求和响应 Http协议对浏览器发出的Request格式以及对Web服务器发出的Response格式有具体的规定. 请求部分由三部分组成: Requset line:请求行,位于第一行 Req ...

  9. django 进行语言的国际化及在后台进行中英文切换

    项目的部署地为: 中国大陆与美国东海岸, 两个地区的服务器数据不进行同步, 中国地区的服务器页面展示中文, 美国地区的服务器页面展示成英文, 项目后台使用python编程语言进行开发, 并结合djan ...

随机推荐

  1. java-过滤器、拦截器

    1.基础知识 1.1面向对象编程(OOP).面向切面编程(AOP) 面向对象编程: 将需求功能划分为不同的.相对独立的和封装良好的类,使他们有属于自己的行为,依靠继承和多态等来定义彼此的关系. 面向切 ...

  2. Junit4使用实验报告

    一.题目简介 Junit4的使用及求和测试. 二.源码的github链接 https://github.com/bjing123/test-/blob/master/Arithmetic.txt ht ...

  3. maven 总结

  4. 金蝶特性配置(超级BOM)

    特性配置 特性物料 物料和特性的对应关系 自动新增物料的系统设置 特性物料自动新增 自动新增的特性配置方案 相关表 ICPlan_CharacteristicEntry

  5. python常用命令和基础运算符

    基础运算符 http://www.cnblogs.com/alex3714/articles/5465198.html 身份运算符:is is not成员运算符:in not in ##in 判断元素 ...

  6. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数

    什么样的程序员才是优秀的程序员?咪博士认为“慵懒”的程序员才是真正优秀的程序员.听起来不合逻辑?真正优秀的程序员知道如何高效地工作,而不是用不止境的加班来完成工作任务.函数便是程序员高效工作的利器之一 ...

  7. spring cloud实战与思考(一) spring config全局配置方案设计

    “spring cloud”的配置中心工具“spring cloud config”提供了分布式系统配置文件集中管理解决方案.该工具功能强大,实现也很简单.网上可以搜索到很多开发教程和用例.本文并不是 ...

  8. 主成分分析PCA(Principal Component Analysis)在sklearn中的应用及部分源码分析

    最近太忙,又有一段时间没写东西了. pca是机器学习中一个重要的降维技术,是特征提取的代表.关于pca的实现原理,在此不做过多赘述,相关参考书和各大神牛的博客都已经有各种各样的详细介绍. 如需学习相关 ...

  9. GitHub && GitLab

    1.github介绍 Git作为一个开源的分布式版本控制系统,已经被越来越多的人使用,随之需要的就是需要有个专门的地方存储.管理通过Git上传的项目,这就是gitHub gitHub是一个面向开源及私 ...

  10. docker --Dockerfile--最小java环境

    # AlpineLinux open jre 8FROM alpine:latest # Install cURLRUN echo -e "https://mirror.tuna.tsing ...