用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 , );
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请求的更多相关文章
- [日常] 跨语言的POST请求问题的解决
部门对外提供了一个HTTP的POST接口,但是对方公司的程序员使用C语言进行的调用,PHP这边一直无法获取到参数.遇到这种情况是因为对方没有完全按照HTTP协议中的POST发送数据.在HTTP头部分没 ...
- Linux套接子(c语言)模拟http请求、应答
有关套接子和http请求报文的博客在CSDN有很多比如,点这里查看,这里我就不再做过多赘述了,下面我们直接实战,模拟http请求. 要求:浏览器访问本地的localhost,在浏览器页面打印出 Hel ...
- Http请求与响应格式
原文:http://www.cnblogs.com/z941030/p/4699779.html Http协议对浏览器发出的Request格式以及对Web服务器发出的Response格式有具体的规定. ...
- JS实现多语言方式
应用场景: 在不同移动平台(IOS,Android)上,建立一套与HTML页面通讯框架:主要业务逻辑使用HTML开发:想支持多语言开发. 动机: 通过主动发消息的方式,在页面完成初始化前,获取当前语言 ...
- ASP.NET Core多语言 (转载)
ASP.NET Core中提供了一些本地化服务和中间件,可将网站本地化为不同的语言文化.ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实现 ...
- .NET Core多语言
ASP.NET Core中提供了一些本地化服务和中间件,可将网站本地化为不同的语言文化. ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实 ...
- Spring MVC 多语言化的实践和学习
一.主要参考: SpringMVC简单实现国际化/多语言 - CSDN博客 https://blog.csdn.net/u013360850/article/details/70860144/ 二.总 ...
- Http请求和响应
Http请求和响应 Http协议对浏览器发出的Request格式以及对Web服务器发出的Response格式有具体的规定. 请求部分由三部分组成: Requset line:请求行,位于第一行 Req ...
- django 进行语言的国际化及在后台进行中英文切换
项目的部署地为: 中国大陆与美国东海岸, 两个地区的服务器数据不进行同步, 中国地区的服务器页面展示中文, 美国地区的服务器页面展示成英文, 项目后台使用python编程语言进行开发, 并结合djan ...
随机推荐
- 个人作业Week1
一.<构建之法>提问 1.需求是什么?需求的规范需要明确吗? 2.一个人开发效率非常高,多人开发,个人效率随团队人数上升而直线下降,我们一般需要将大项目拆为小项目,使协作耦合产生的效率负影 ...
- 语音笔记:MFCC
一,传统语音识别体系结构 二,MFCC特征提取 MFCC(Mel-frequency cepstral coefficients):梅尔频率倒谱系数.梅尔频率是基于人耳听觉特性提出来的, 它与Hz频率 ...
- ros-安装
1.安装了ubuntu for ros. 运行评论下边那条命令: 2.rtabamp 3.准备安装机器人导航仿真系统:https://blog.csdn.net/wangchao7281/articl ...
- SQL Server 2016以上版本大小写敏感的解决办法
alter database IovData set Single_user alter database IovData COLLATE Chinese_PRC_CI_AS alter databa ...
- c++中常见概念、关键字等的区别
(1).重载,覆盖和隐藏的区别: 重载主要是函数的重载,函数名相同,返回类型相同,但是函数形参不同,被调用时,根据函数形参决定调用原函数还是重载函数. 覆盖主要用在继承多态中,函数前加virtual关 ...
- Fixed the bug:while running alert/confirm in javascript the chrome freezes
显示高级设置... 系统 -> 使用硬件加速模式(如果可用) 操作系统如果不支持硬件加速,却启动此项,就悲催了.小伙伴们可别瞎点了,太吃亏. 现象alert/confirm一执行,chrome ...
- VC6到VC2010,项目迁移错误
错误信息: error C2440: “static_cast”: cannot from “BOOL (__thiscall CSelectRect::* )(void)” to “BOOL (__ ...
- selenium之截图
selenium支持对当前页面保存截图,使用方法: driver.get_screenshot_as_file(file_path) 代码举例: ...... def get_screenshot(d ...
- codeforces706C
Hard problem CodeForces - 706C 现在有 n 个由小写字母组成的字符串.他想要让这些字符串按字典序排列,但是他不能交换任意两个字符串.他唯一能做的事是翻转字符串. 翻转第 ...
- BZOJ1415[Noi2005]聪聪和可可——记忆化搜索+期望dp
题目描述 输入 数据的第1行为两个整数N和E,以空格分隔,分别表示森林中的景点数和连接相邻景点的路的条数. 第2行包含两个整数C和M,以空格分隔,分别表示初始时聪聪和可可所在的景点的编号. 接下来E行 ...