模拟http协议上传文件的问题(急!!!)

coolcpz 2009-07-30 04:24:05
现有一个项目需要通过在在程序内模拟http协议实现文件上传.我首先通过建立与网站的socket连接,然后再构建一个post包模拟用户登录.POST包如下:
POST /merchantuser/operate.do?method=mobLogin HTTP/1.1
Accept:*/*
Accept-Language:zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; CIBA; MAXTHON 2.0)
Host:test.simp.com:88
Content-Length: 68

userName=haobainian&passWord=haobainian&Submit=+%E7%99%BB+%E5%BD%95+

// 这是网站返回的数据.
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=07F456027E0CFAA81AA9F577E4ED98C2; Path=/
Content-Type: text/html;charset=UTF-8
Content-Length: 1352
Date: Thu, 30 Jul 2009 08:12:45 GMT


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>.........--.........</title>
..........................略........................

在这一步服务器返回了登录成功后下一面面的html源码.
接着我构建一个上传文件的POST包:

POST /sd/mobile.do?method=saveGoods HTTP/1.1
Accept:*/*
Referer: http://test.simpbook.com:88/sd/mobile.do?method=saveGoods
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; CIBA; MAXTHON 2.0)
Host:test.simp.com:88
Content-Type:multipart/form-data;boundary=---------------------------93e41c6e2091
Content-Length: 775

Connection: Keep-Alive
Cookie: JSESSIONID=61EB58C3FA36F0B2C9D7861C840DFBEF

---------------------------93e41c6e2091
Content-Disposition: form-data; name="org.apache.struts.taglib.html.TOKEN"

8ff403e0f016bdb7965a488a3f49c0ff
---------------------------93e41c6e2091
Content-Disposition: form-data; name="name"

test
---------------------------93e41c6e2091
Content-Disposition: form-data; name="bigClassId"

414
---------------------------93e41c6e2091
Content-Disposition: form-data; name="sedClassId"

415
---------------------------93e41c6e2091
Content-Disposition: form-data; name="thrClassId"

441
---------------------------93e41c6e2091
Content-Disposition: form-data; name="salePrice"

333
---------------------------93e41c6e2091
Content-Disposition: form-data; name=mobGoogsPic filename=test.log"
Content-Type: application/octet-stream

1234567890
---------------------------93e41c6e2091--
我将这个包发过去后,服务器那边直接给我返回了登录界面,好像是认为我没有登录.但我通过抓包工具抓IE上传的数据包,好像与我的上传的数据包没多少区别,IE的包如下:
POST /sd/mobile.do?method=saveGoods HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://test.simpbook.com:88/sd/mobile.do?method=saveGoods
Accept-Language: zh-cn
Content-Type: multipart/form-data; boundary=---------------------------7d926f1d6066c
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; CIBA; MAXTHON 2.0)
Host: test.simpbook.com:88
Content-Length: 988
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=5F48F6F49399DF1A08F6383D0332BC10

-----------------------------7d926f1d6066c
Content-Disposition: form-data; name="org.apache.struts.taglib.html.TOKEN"

fe55ea4a9be1fed654b5852fa7f7bce5
-----------------------------7d926f1d6066c
Content-Disposition: form-data; name="name"

test
-----------------------------7d926f1d6066c
Content-Disposition: form-data; name="mobGoogsPic"; filename="C:\test.log"
Content-Type: application/octet-stream

1234567890
-----------------------------7d926f1d6066c
Content-Disposition: form-data; name="bigClassId"

414
-----------------------------7d926f1d6066c
Content-Disposition: form-data; name="sedClassId"

415
-----------------------------7d926f1d6066c
Content-Disposition: form-data; name="thrClassId"

441
-----------------------------7d926f1d6066c
Content-Disposition: form-data; name="salePrice"

333
-----------------------------7d926f1d6066c
Content-Disposition: form-data; name="Submit2222"

... ...
-----------------------------7d926f1d6066c--

...全文
451 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolcpz 2009-08-22
  • 打赏
  • 举报
回复
问题解决了,是分隔符不对。结帖,谢谢各位。。。
coolcpz 2009-08-06
  • 打赏
  • 举报
回复
谢谢楼上的朋友帮忙,这几天公司的事情忙都没时间上来看.之前之所以返回登录界面给我是由于我多了一个空行,但现在我用修改后的包发送过去服务器那边总取不到文件域.

POST /sd/mobile.do?method=saveGoods HTTP/1.1
Accept:*/*
Referer: http://test.simp.com:88/sd/mobile.do?method=inputGoods
Accept-Language:zh-cn
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; CIBA; MAXTHON 2.0)
Host:test.simp.com:88
Content-Type:multipart/form-data; boundary=---------------------------7d93e41c6e20
Connection: Keep-Alive
Cookie: JSESSIONID=E78FA49EE61251E196DB88063EAC2ADB
Content-Length: 1639

---------------------------7d93e41c6e20
Content-Disposition: form-data; name="name"

test
---------------------------7d93e41c6e20
Content-Disposition: form-data; name="bigClassId"

414
---------------------------7d93e41c6e20
Content-Disposition: form-data; name="sedClassId"

415
---------------------------7d93e41c6e20
Content-Disposition: form-data; name="thrClassId"

441
---------------------------7d93e41c6e20
Content-Disposition: form-data; name="salePrice"

888
---------------------------7d93e41c6e20
Content-Disposition: form-data; name="mobGoogsPic"; filename="dddd.jpg"
Content-Type: image/pjpeg
Content-Transfer-Encoding: binary

......JFIF.....`.`.....C........... .
..
................. $.' ",#..(7),01444.'9=82<.342...C. ....

.2!.!22222222222222222222222222222222222222222222222222........%..".....................................
.....................}........!1A..Qa."q.2....#B...R..$3br.
.....%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz.......................................................................................................
.....................w.......!1..AQ.aq."2...B.... #3R..br.
.$4.%.....&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz....................................................................................?....(.......z6.y..Iv.....O.h..$.T
.U.<...S....&.._.k(..7m... .....nG...9.W..S..<...+bg.Qw._......QEY...WC...k....d/..Z....Q(q.S.....A......Ti....k}sf....n.W....2..a.`.0.t&..Y'....I..;..by$...k..Y..R..M..u,q.I.. ..z
.B.:n3J.[..j.L..w........."&}....:............,.....}& .......7*y=O......lk...zQ.+....h...
---------------------------7d93e41c6e20--
fangle6688 2009-07-31
  • 打赏
  • 举报
回复
Content-Length: 988,这个不一致是不行的
ahao 2009-07-30
  • 打赏
  • 举报
回复
很简单,你没有cookie
socoola 2009-07-30
  • 打赏
  • 举报
回复
JSESSIONID是不是跟服务器返回的不匹配?
oyljerry 2009-07-30
  • 打赏
  • 举报
回复
winhttp等可以构建http请求,自己发送
blingpro 2009-07-30
  • 打赏
  • 举报
回复
用socket可以post数据的,只要你构造数据相同。
试着认真分析一下两个包(你构造的数据和ie抓包数据)

我试过用socket就差一个\r\n就导致访问不了

希望你能解决

gl

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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