奇怪的POST数据格式——求助!!!

homor 2002-04-18 04:19:55
偶在研究浏览网页时IE向服务器POST的数据,大部分数据的格式倒还都是
“name1=value1&name2=value2”的形式。可是有一个按钮点下后向服务器POST的数据却是这样的:
-----------------------------7d218bf4015a..Content-Disposition: form-data; name="SID"....21706_E3FDA2C2_21706-0..-----------------------------7d218bf4015a..Content-Disposition: form-data; name="SESSION_DIR"......-----------------------------7d218bf4015a..Content-Disposition: form-data; name="Period"....All Years..-----------------------------7d218 bf4015a..Content-Disposition: form-data; name="fileToUpload"; filename=""..Content-Type: application/octet-stream......-----------------------------7d218bf4015a..Content-Disposition: form-data; name="Form"....Full..-----------------------------7d218bf4015a..Content-Disposition: form-data; name="General Search.x"....52..-----------------------------7d218bf4015a..Content-Disposition: form-data; name="General Search.y"....9..-----------------------------7d218bf4015a--..

对于这样的数据,我要用VC的sendrequest发给服务器的话,应该发送什么样的东西呀?
...全文
263 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
flywhc 2002-04-24
  • 打赏
  • 举报
回复
给你贴一段以前给人在MSN上讲HTTP协议的聊天记录吧,当时我一边教一边想的程序可能不太好看。但其实很简单。
Jason 说:
运行,建立一个form
ying 说:
OK
Jason 说:
加入winsock control 到tool
Jason 说:
放上去两个winsock control,一个叫tcp,一个tcp2
ying 说:
done
ying 说:
then?
Jason 说:
放一个 text box
ying 说:
OK
Jason 说:
好了,现在我们可以做一个http server,类似IIS
Jason 说:
编码:
Jason 说:
Public s As String


Private Sub Form_Load()
tcp.Protocol = sckTCPProtocol
tcp.LocalPort = 8000
tcp.Listen

End Sub
Jason 说:
Private Sub tcp_ConnectionRequest(ByVal requestID As Long)
tcp2.Accept requestID
End Sub

Private Sub tcp2_DataArrival(ByVal bytesTotal As Long)
Dim t As String
tcp2.GetData t
s = s + t
Text1.Text = s
If InStr(s, vbCrLf + vbCrLf) <> -1 Then
tcp2.SendData "200 OK HTTP1.1" + vbCrLf + vbCrLf + "ok test ok"
End If
End Sub
Jason 说:

Private Sub tcp2_SendComplete()
tcp2.Close
End Sub
Jason 说:
写完了?
ying 说:
恩,贴完了,呵呵
Jason 说:
run it
ying 说:
run了,没什么错
Jason 说:
open a IE
Jason 说:
input a address:
Jason 说:
http://127.0.0.1:8000/
Jason 说:
now, we changed http port 80 to 8000. normally, we use 80.
ying 说:
80打不开,好像
Jason 说:
是8000
Jason 说:
写错了一行:
Jason 说:
tcp2.SendData "200 OK HTTP/1.1" + vbCrLf + vbCrLf + "ok test ok"
ying 说:
8000我试过了
Jason 说:
少了一个"/"
Jason 说:
8000效果如何?
ying 说:
浏览器显示ok test ok
ying 说:
文本框也显示一大队...
ying 说:
好像都是http头文件信息
Jason 说:
right!
Jason 说:
读一下,想象看,明白了吗?这就是http协议了,就这么简单
Jason 说:
GET / HTTP/1.1
Jason 说:
GET是方法,也可以是POST, head等等。
ying 说:
我知道
Jason 说:
/是地址,如果你刚才加上 地址比如http://127.0.0.1:8000/abcd/asdfadf.htm 你看看
Jason 说:
http/1.1是协议版本
Jason 说:
后面的你一看就知道了
Jason 说:
返回时,就是200 ok 代表状态,如果是404 not found就代表文件没找到之类的

上面是server部分的编程,而client部分更简单。

所谓proxy就是把server接受到的request用client发出去,把client接受的response用server发出去。非常简单。
homor 2002-04-20
  • 打赏
  • 举报
回复
如果可以给出VB的代码的话,一定另外给分。
homor 2002-04-20
  • 打赏
  • 举报
回复
哦?VB可以这么容易就做到截取吗?能否指教一下?谢谢!
flywhc 2002-04-19
  • 打赏
  • 举报
回复
另外关于截取HTTP包,告诉你一个技巧,用那些软件截取都是很糟糕的,
最好的方式是自己写一个http proxy,如果用vb写的话,不超过20行,
这样把那些请求和会应文本显示出来一看就明白了。

你所截取的不是标准的http 1.1包,很明显的,传统的http/1.1post只会
有一个简单的body, urlencode编码,而multipart编码则扩展了body,
Disposition: form-data; name="fileToUpload"; filename=""..Content-Type: application/octet-stream
显然 fileToUpload就是你那个<input type=file>的element,后面紧跟mime编码的二进制数据。
因为编码复杂,没有简单的办法可以实现文件上传,可能有现成的代码,但我只见过server side activex dll的 source code
flywhc 2002-04-19
  • 打赏
  • 举报
回复
因为你的form的编码方式是multi-part,用于文件上传,你好好看看your <form> elecment in html page.

multipart编码方式里,使用boundary指定分隔串,一般是包括 ----------- \r\n 的。具体格式类似email的mime
事实上,outlook的html email的格式也是一样的multipart

如果你用VC发送一个表单,并且没有fileupload的功能的话,不需要使用这种编码方式
homor 2002-04-19
  • 打赏
  • 举报
回复
大侠可否留下e-mail地址,我想进一步讨论一下。
谢谢。
111222 2002-04-19
  • 打赏
  • 举报
回复
首先,你截获的数据不对(跟你的截包软件有关,可能IE POST的数据被这软件改写了)

每行应该是 \r\n 作为结束标志而不是 --------------------------
我注意到你上面有很多..

估计".."就是\r\n

所以你不妨还原成HTTP协议规定的标准形式。

POST 在一般情况下应该注意2点

一是: content-length: 一定要跟POST中正文长度字节数相等,在你这里就是strlen("name1=value1&name2=value2")

二是: Content-Type: 在给CSDN发帖子时候一定要是 application/x-www-form-urlencoded

4,390

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧