现在本机用ASP配好了一个IIS,现在自己编写客户端,要求通过socket利用http协议与服务器端进行通信,现在的要求就是在自己编写的客户端输入一串字符串,使之能够上传到服务器,我想应该是用POST格式吧,在网上搜了相关资料,发现多数是关于GET的,也看了RFC2616,发现上面也没详细说明POST的格式,故特来请教。另外附上自己根据网上资料编的request,但是最后运行时提示:400 Bad Request
sprintf(request, "POST http://localhost:6000/default.asp HTTP/1.1\r\n\
Accept: */*\r\n\
User-Agent: MSIE 6.0\r\n\
Content-Type: application/x-www-form-urlencoded\r\n\
Content-Length: 20\r\n\
Accept-Language: zh-cn\r\n\
Host: http://localhost:6000\r\n\r\n\
type=12345&name=aaaa\r\n\r\n");
sprintf(request, "POST http://localhost:6000/default.asp HTTP/1.1\r\n\
Accept: */*\r\n\
User-Agent: MSIE 6.0\r\n\
Content-Type: application/x-www-form-urlencoded\r\n\
Content-Length: 20\r\n\
Accept-Language: zh-cn\r\n\
Host: http://localhost:6000\r\n\r\n\
type=12345&name=aaaa\r\n\r\n");
解决方案 »
- COM的一点点东西
- 问jason_wentzel :接着上次的问题,怎么知道当前所在的窗口是哪个窗口呢?
- 在MFC对话框中怎样单个改变Static Text字体的大小?
- DeleteFile 问题
- 组合框内的条目如何让用户自己添加?
- 各位高手,为什么我在ListCtrl中设定的BackGround Image不起作用啊?如何才能让它显示出来?
- 用#include<mysql.h>时报错 百分相赠
- 那位大虾推荐几本COM的电子书,小弟感激不尽!!!!!!!!!
- 谁知道哪里有win2000下的ip包捕获的vc源代码,谢谢
- 一个初学者的起步问题(2)
- 求教 基于web方式的视频监控系统解决方案
- 请问什么方法可以让static控件中的文字垂直居中?
www.w3.org/Protocols/rfc2616/rfc2616.html
sprintf(request, "POST /default.asp HTTP/1.1\r\n\
Content-Length: 20\r\n\
Host: localhost\r\n\r\n\
type=12345&name=aaaa\r\n\r\n"
);
Accept-Language: zh-cn\r\n\
Host: http://localhost:6000\r\n\r\n\
type=12345&name=aaaa\r\n\r\n ");想问一下Content-Length写的是20,后面实际给了多少?这上面至少是24,甚至是25,不是么?
"Accept: */*\r\n" \
"Content-Type: application/x-www-form-urlencoded\r\n" \
"User-Agent: Mozilla/4.0 (compatible; MPUD %s)\r\n" \
"Host: %s\r\n" \"Cache-Control: no-cache\r\n" \
"Connection: Keep-Alive\r\n" \
"Content-Length: %d\r\n" \
"\r\n"
"%s"
我登录VCKBASE抓的包如下,注意换行符。
POST /SYS/login/login.aspx HTTP/1.1
Host: www.vckbase.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.vckbase.com/
Cookie: ASPSESSIONIDCSAATTCD=DOMMILABJOPANJPNNAKAMCPK
Content-Type: application/x-www-form-urlencoded
Content-Length: 79userid=aaaaaaa&password=01234567890&gclsid=501&imageField3.x=43&imageField3.y=11
2.winsock自己写,connect,send等。
两中方案我都实现过,包括cookie管理
Accept: */*\r\n\
User-Agent: MSIE 6.0\r\n\
Content-Type: application/x-www-form-urlencoded\r\n\
Content-Length: 20\r\n\
Accept-Language: zh-cn\r\n\
Host: http://localhost:6000\r\n\r\n\
type=12345&name=aaaa\r\n\r\n ");通常这种用2个包发送,最后一句独立一个包,这也可以抓包看到
这是最简单的做法
借宝地也问一下:
在向163.com进行邮箱登陆的时候发出的请求为什么是 reg 而不是post。如下:
"reg http://localhost:6000/default.asp HTTP/1.1\r\n\
Accept: */*\r\n\
User-Agent: MSIE 6.0\r\n\
Content-Type: application/x-www-form-urlencoded\r\n\
Content-Length: 20\r\n\
Accept-Language: zh-cn\r\n\
Host: http://www.163.com\r\n\r\n\
type=12345&name=aaaa\r\n\r\n "初学,各位见笑了。。谢谢先。
第一行:请求方式 资源位置 HTTP/版本号
每行表达一个意思
空行(实际上有两对\r\n)就算请求头结束了GET方式就是上面的情况如果为POST,表明请求头后面还有附加数据,分两种情况:application/x-www-form-urlencoded 和 multipart/form-data
前者如上面很多帖子所说,在请求头中告诉服务器附加数据的长度(Content-Length)就可以了,考虑到webserver会对名值对自动解析,填写要规范,不安全的字符要编码
后者为大块多块数据(比如上传文件)的处理,需要进行边界(boundary)处理用 sniffer 抓包看看能更直观地了解楼上说163.com用的是reg方式,其实什么都无所谓,只要它的webwerver认识就行(它总是要看看你的帽子戴得对不对),以SOCKET的眼光来看,就是send,recv
Host: www.vckbase.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/2008052906 Firefox/3.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.vckbase.com/
Cookie: ASPSESSIONIDCSAATTCD=DOMMILABJOPANJPNNAKAMCPK
Content-Type: application/x-www-form-urlencoded
Content-Length: 79userid=aaaaaaa&password=01234567890&gclsid=501&imageField3.x=43&imageField3.y=1124楼的这个就是例子。需要特别注意的是Content-Length后的数据长度值一定要正确,是获取的数据体部分的字节长度,具体就是 userid=aaaaaaa&password=01234567890&gclsid=501&imageField3.x=43&imageField3.y=11 这部分对应的数据。
http://www.wantsoft.com/article/45.htm
这个是我写的,使用VC++2008写的,绝对正确,现在项目一直在使用,你可以下下来参考一下。。
"Accept-Language: zh-CN,zh;q=0.9,en;q=0.8\n"
"Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1,us-ascii\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQPinyin 722; .NET CLR 2.0.50727)\n"
"Host: xxx.xxx.cn\n"
"Connection: Keep-Alive\n"
"Content-Length:%d\n\n"
"%s",strlen(Body)+1,Body);
"Accept: */*\r\n" \
"Content-Type: application/x-www-form-urlencoded\r\n" \
"User-Agent: Mozilla/4.0 (compatible; MPUD %s)\r\n" \
"Host: %s\r\n" \"Cache-Control: no-cache\r\n" \
"Connection: Keep-Alive\r\n" \
"Content-Length: %d\r\n" \
"\r\n"
"%s"