社区
C语言
帖子详情
C语言如何用socket发送http请求 得到数据包?
小魔菇
2009-07-15 09:22:08
C语言如何用socket发送http请求 得到数据包?
有源码例子最好了
...全文
2775
19
打赏
收藏
C语言如何用socket发送http请求 得到数据包?
C语言如何用socket发送http请求 得到数据包? 有源码例子最好了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ctroll
2011-07-19
打赏
举报
回复
[Quote=引用 14 楼 eclipse_2 的回复:]
引用 12 楼 lemirymoo 的回复:
你可以把
GET / HTTP/1.1\r\n\r\n
发送给http://www.baidu.com/
会得到类似下面的东西,上面的是请求头,下面的是内容。Http响应数据包可能会分多次发回来,所以不要只看一个数据包。
HTTP/1.1 200 OK
Date: Wed, 15 Jul 2009 02:56:45 GMT
Ser……
[/Quote]
循环取。
char dest[1000];
nRet=1;
while(nRet>0)
{
nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0);
if(nRet>0)
dest[nRet]=0;
else
dest[0]=0;
printf("\nReceived bytes:%d\n",nRet);
printf("Result:\n%s",dest);
}
renxiaowen
2010-07-15
打赏
举报
回复
楼主好。。我最近也在研究类似的问题,我想加你QQ好友请教你一下。。。麻烦你了
小魔菇
2009-11-26
打赏
举报
回复
加我Q
312134065
deping_lin
2009-11-26
打赏
举报
回复
楼主你好,我最近也在学socket发送http的请求。能不能把你的代码给我学习一下呢?
lemirymoo
2009-10-26
打赏
举报
回复
Content-Length 中的数字就是正文长度,从\r\n\r\n 后面开始量这么多个长度就是数据末尾了。
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 12 楼 lemirymoo 的回复:]
你可以把
GET / HTTP/1.1\r\n\r\n
发送给http://www.baidu.com/
会得到类似下面的东西,上面的是请求头,下面的是内容。Http响应数据包可能会分多次发回来,所以不要只看一个数据包。
HTTP/1.1 200 OK
Date: Wed, 15 Jul 2009 02:56:45 GMT
Server: BWS/1.0
Content-Length: 3397
Content-Type: text/html
Cache-Control: private
Expires: Wed, 15 Jul 2009 02:56:45 GMT
Set-Cookie: BAIDUID=976BA6BFA22EB89BB…
[/Quote]
如何判断从服务端的数据接收完成了呢?
小魔菇
2009-07-15
打赏
举报
回复
是我错了
程序有问题
已经找出来了
lemirymoo
2009-07-15
打赏
举报
回复
你可以把
GET / HTTP/1.1\r\n\r\n
发送给http://www.baidu.com/
会得到类似下面的东西,上面的是请求头,下面的是内容。Http响应数据包可能会分多次发回来,所以不要只看一个数据包。
HTTP/1.1 200 OK
Date: Wed, 15 Jul 2009 02:56:45 GMT
Server: BWS/1.0
Content-Length: 3397
Content-Type: text/html
Cache-Control: private
Expires: Wed, 15 Jul 2009 02:56:45 GMT
Set-Cookie: BAIDUID=976BA6BFA22EB89BB49FEC0552EE7636:FG=1; expires=Wed, 15-Jul-3
9 02:56:45 GMT; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "
<html><head><meta http-equiv=Content-Type content="text/html;charset=gb2312"><ti
tle>百度一下,你就知道 </title><style>body{margin:4px 0}p{margin:0;padding:
0}img{border:0}td,p,#u{font-size:12px}#b,#u,#l td,a{font-family:arial}#kw{font:1
6px Verdana;height:1.78em;padding-top:2px}#b{height:30px;padding-top:4px}#b,#b a
{color:#77c}#u{padding-right:10px;line-height:19px;text-align:right;margin:0 0 3
px !important;margin:0 0 10px}#sb{height:2em;width:5.6em}#km{height:50px}#l{marg
in:0 0 5px 15px}#l td{padding-left:107px}p,table{width:650px;border:0}#l td,#sb,
#km{font-size:14px}#l a,#l b{margin-right:1.14em}a{color:#00c}a:active{color:#f6
0}#hp{position:absolute;margin-left:6px}#lg{margin:-26px 0 -44px}#lk{width:auto;
line-height:18px;vertical-align:top}form{position:relative;z-index:9}</style></h
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 9 楼 lemirymoo 的回复:]
才看明白你要的是客户端,
那你就发
GET [URL] HTTP/1.1\r\n\r\n
有这一行就足够了 。
[/Quote]
只能得到数据头
正文得不到
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 7 楼 lemirymoo 的回复:]
下面代码能够演示出大概意思。你用socket把buff送回客户端就成了。
char *head = "HTTP/1.1 200 OK\r\nContent-Length: %u\r\n\r\n%s";
char *p = " <html> <head> <title>标题 </title> </head> <body>正文 </body> </html>";
char buff[4096];
sprintf(buff,head,strlen(p),p);
[/Quote]
我是从一个客户端向一个网站发送http请求的
服务端我操作不了哈
lemirymoo
2009-07-15
打赏
举报
回复
才看明白你要的是客户端,
那你就发
GET [URL] HTTP/1.1\r\n\r\n
有这一行就足够了 。
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 6 楼 lemirymoo 的回复:]
找个rfc2616按那里面说的发消息就成了。
我用MinGW做过Http服务器,并且实现了C语言做动态网页,虽然很简陋,但毕竟是实现了。
做Http服务器端程序,只要有rfc2616就足够了。
其中请求头中最重要的是第一行 GET [URL] HTTP/1.1\r\n
响应头最重要的是响应代码和正文长度。
如果你只是很简单地做,那我推荐你这样写响应头
HTTP/1.1 200 OK\r\n
Content-Length:[正文长度]\r\n\r\n
[正文]
其中的正文长度就是…
[/Quote]
我是用一个抓包工具 按照上面的格式写的
可以得到数据 不过只能收到数据头部信息
其他的正文信息收不到
lemirymoo
2009-07-15
打赏
举报
回复
下面代码能够演示出大概意思。你用socket把buff送回客户端就成了。
char *head = "HTTP/1.1 200 OK\r\nContent-Length: %u\r\n\r\n%s";
char *p = "<html><head><title>标题</title></head><body>正文</body></html>";
char buff[4096];
sprintf(buff,head,strlen(p),p);
lemirymoo
2009-07-15
打赏
举报
回复
找个rfc2616按那里面说的发消息就成了。
我用MinGW做过Http服务器,并且实现了C语言做动态网页,虽然很简陋,但毕竟是实现了。
做Http服务器端程序,只要有rfc2616就足够了。
其中请求头中最重要的是第一行 GET [URL] HTTP/1.1\r\n
响应头最重要的是响应代码和正文长度。
如果你只是很简单地做,那我推荐你这样写响应头
HTTP/1.1 200 OK\r\n
Content-Length:[正文长度]\r\n\r\n
[正文]
其中的正文长度就是从[正文]部分的长度,其中不包括请求头。
HTTP协议规定,请求头中的换行符是\r\n而不是\n这一点要注意。
一般来说这样写的请求头就能够正常浏览了。
小魔菇
2009-07-15
打赏
举报
回复
[Quote=引用 4 楼 NKLoveRene 的回复:]
找个抓包工具抓一下数据包
看http头是怎么组成的
然后照着自己写个字符串,用socket发出去,然后再收一下,就得到数据包了
[/Quote]
为什么我只能得到数据包的头部
其他的数据得不到?
NKLoveRene
2009-07-15
打赏
举报
回复
找个抓包工具抓一下数据包
看http头是怎么组成的
然后照着自己写个字符串,用socket发出去,然后再收一下,就得到数据包了
icefairy
2009-07-15
打赏
举报
回复
mark
Nio96
2009-07-15
打赏
举报
回复
有人讲过。。。
http://blog.csdn.net/wbczyh/archive/2008/02/24/2117094.aspx
SIJIMO
2009-07-15
打赏
举报
回复
http://topic.csdn.net/u/20090217/15/4a5878d8-5019-4be0-b5c2-b6977a38dcd7.html
linux c获取网卡ip,linux c 获取本机公网IP的实现方法
1、linux c代码实现#include #include #include #include #include #include #include #include typedef enum {false,true}bool;int main(){bool flag;int sock;char **pptr = NULL;struct sockaddr_in destAddr;st...
linux c 获取本机公网IP
1、linux c代码实现 #include <netdb.h>#include <stdio.h> #include <stdlib.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <netinet/in.h>#i...
使用
C语言
实现HTTP POST请求与Json数据交互
HTTP POST方法是一种请求方式,用于将数据
发送
到服务器以创建新的资源。与GET方法不同,它不将数据附加在URL后,而是放入请求体中,这使得POST更适合传输敏感数据和大量数据。了解HTTP POST方法是构建现代Web应用的基础之一。
Socket
是网络通信的基石,它提供了一套标准的API接口,使得应用程序能够使用网络协议栈进行通信。在
C语言
中,
socket
API为不同类型的网络通信提供了支持,比如TCP、UDP和原始套接字。
Socket
API主要包含以下操作:套接字创建。
利用
C语言
实现POST
数据包
如此简单【模拟网页提交表单】
http://www.maben.com.cn/archives/212.html 利用
C语言
实现POST
数据包
如此简单【模拟网页提交表单】 //*****************************************// //*********利用C实现自动发包***************// //*********作者:马 犇******************
发送
和接受tcp
数据包
c语言
windows_「
socket
应用」基于
C语言
的TCP天气客户端的实现...
一、前言上一篇笔记分享了,这一篇分享一个用
C语言
写的、基于TCP的一个HTTP天气客户端的实现,这个一个控制台应用程序,最终的界面如下:二、天气客户端实现的要点首先,需要说明的是,这份代码是在windows系统下使用gcc6.3.0进行编译的。1、秘钥心知天气:http://www.seniverse.com我们完成这个实验必须
得到
这个天气网站(或者其它天气网站)上面去注册一个账号才能使用它的天气...
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章