用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. ULMFiT 阅读笔记

    ULMFiT 阅读笔记 概述 这篇文章从文本分类模型入手,主要提出了两点:一是预训练语言模型在大中小规模的数据集中都能提升分类效果,在小规模数据集中效果尤为显著.二是提出了多种预训练的调参方法,包括D ...

  2. 软件工程驻足篇章:第十七周和BugPhobia团队漫长的道别

    0x01 :序言 I am a slow walker, but I never walk backwards. 成长于被爱,学着爱人 成长的故事 也是年少的星期六结束的故事 就仿佛我和BugPhob ...

  3. 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度

    <Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...

  4. C++课程学习建议

    从C到C++,学院都采用了机房授课模式,也在探索更为高效的实践与理论融合的教学方法,对于课程学习来说,仍有以下建议: 1.多看书.看书是理解基本概念的必备手段.也是学习的根本.应将课前预习.课后复习联 ...

  5. 第六次作业-my Backlog

    杨灵超小组 My  Backlog                                小学生四则运算自动生成(Backlog) ID Name IMP EST How   to Demo ...

  6. java.lang.Exception: No tests found matching Method tes(com.bw.test.Testrefiect) from org.junit.vintage.engine.descriptor.RunnerRequest@3bfdc050 at org.junit.internal.requests.FilterRequest.getRunner

    junit   方法  没有加上注解  @Test java.lang.Exception: No tests found matching Method tes(com.bw.test.Testre ...

  7. shell脚本第一课

    shell脚本的文件名一般是以.sh结尾,也可以以其他格式如.txt,甚至不加后缀. 脚本的第一行的#!/bin/bash表示指定脚本执行时的解析器. #!/bin/bash #文件名:test.sh ...

  8. PAT 1008 数组元素循环右移问题

    https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808 一个数组A中存有N(N&gt0)个整 ...

  9. nginx for Windows Known issues:path

    http://nginx.org/en/docs/windows.html nginx/Windows uses the directory where it has been run as the ...

  10. Linux下运行Shell脚本或者可执行文件Executable方法

    绝对路径 /xxx/xxx/something.sh /xxx/xxx/executable 相对路径 ./something.sh ./executable 注意:前边得加./,可不是像window ...