wininet http post文件上传总是不成功? ~求高手解析~~

职业炒股 2011-08-06 02:17:00
废话不说,直接上包

成功的应该是:
POST http://up.u.115.com/upload HTTP/1.1
Accept: text/*
Content-Type: multipart/form-data; boundary=----------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
User-Agent: Shockwave Flash
Host: up.u.115.com
Content-Length: 591147
Connection: Keep-Alive
Pragma: no-cache
Cookie: OOFO=%7B%22active_time%22%3A1312610911%2C%22app%22%3A%22u%22%2C%22birthday%22%3A%220000-00-00%22%2C%22gender%22%3A%22%22%2C%22location%22%3A%220%22%2C%22login_ip%22%3A%22218.17.55.167%22%2C%22login_time%22%3A1312610911%2C%22user_id%22%3A%222364079%22%2C%22sign%22%3A%22403fef209c346e1c8da1f63287486270%22%7D; OOFL=wct511%40126.com; OOFA=%2507%2504WRVU%2508%250C%2512r%250DGwQ%2513%250As%251D%2523%255C%251C%250Cq%2540%250A%2527X%2512%2500%2515%250D%2502%2504wPTPLRYZ%250D%2509Q%2507P%2500%2503%2502%2501WU%2503%250C%2500T%250BU%2503%2506%2506Y%2508W%250D%2500QVWU%2506%2507%250E%2503%250B%2501%2507%2500%2505%2503%2501%250E%2500%2502%250A; CUS_2364079=1

------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="Filename"

vs2010教程.doc
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="aid"

1
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="cookie"

%07%04WRVU%08%0C%12r%0DGwQ%13%0As%1D%23%5C%1C%0Cq%40%0A%27X%12%00%15%0D%02%04wPTPLRYZ%0D%09Q%07P%00%03%02%01WU%03%0C%00T%0BU%03%06%06Y%08W%0D%00QVWU%06%07%0E%03%0B%01%07%00%05%03%01%0E%00%02%0A
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="Filedata"; filename="vs2010教程.doc"
Content-Type: application/octet-stream

(文件内容)

*** FIDDLER: RawDisplay truncated at 16384 characters. Right-click to disable truncation. ***


返回:

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 06 Aug 2011 06:08:45 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Powered-By-YlmF: CN-DG-TEL-UP-6
Content-Length: 938

{"state":1,"data":{"is_user":1,"user_id":"2364079","group_id":"1","aid":1,"cid":0,"user_ip":"218.17.55.167","upload_type":1,"callback":["aid","cid",""],"upload_type_limit":"*","upload_size_limit":1073741824,"upload_onoff":1,"upload_validity":"31","upload_size_remain":9275381917,"temp_file_path":"\/www\/bigupload\/2\/0003131862","temp_file_name":"vs2010\u6559\u7a0b.doc","temp_file_size":590336,"temp_file_sha1":"5FD5C46A547FF0BE8923A80CC3344912448FC8CD","is_share":0,"file_sha1":"5FD5C46A547FF0BE8923A80CC3344912448FC8CD","file_ext":"doc","file_name":"vs2010\u6559\u7a0b.doc","file_name_sort":118,"file_size":590336,"file_description":"","pick_time":"","file_status":1,"file_ptime":1312610925,"file_location":"","file_type":102,"file_id":25364240,"table_id":25364240,"pick_code":"e6u9bya8","ico":"doc","sha1":"5FD5C46A547FF0BE8923A80CC3344912448FC8CD","user_ptime":"2011-08-06","pick_expire":"\u8fc7\u671f","area_id":1,"category_id":0}}




我的是:


POST http://up.u.115.com/upload HTTP/1.1
Accept: text/*
Content-Type: multipart/form-data;boundary=----------CSE1CmcQJYTxR6fq4cvfRuThscWDtG
User-Agent: Shockwave Flash
Host: up.u.115.com
Pragma: no-cache
Content-Length: 590336
Cookie: CUS_2364079=1; OOFL=wct511%40126.com; OOFO=%7B%22active_time%22%3A1312610973%2C%22app%22%3A%22u%22%2C%22birthday%22%3A%220000-00-00%22%2C%22gender%22%3A%22%22%2C%22location%22%3A%220%22%2C%22login_ip%22%3A%22218.17.55.167%22%2C%22login_time%22%3A1312610973%2C%22user_id%22%3A%222364079%22%2C%22sign%22%3A%22b21d5e30826a57cbde39f805f36a75b0%22%7D; LACK1=1; LCCK=1; OOFA=%2507%2504WRVU%2508%250C%2512r%250DGwQ%2513%250As%251D%2523%255C%251C%250Cq%2540%250A%2527X%2512%2500%2515%250D%2502%2504wPTPLRYZ%250D%2509Q%2507P%2500%2503%2502%2501QW%2503%2502%2500%2500PS%2506%255D%2502V%255EV%2505%2501%2500%2500RW%2508US%2500%255D%2504P%2500S%2501V%250EWU%255D

(文件内容)
*** FIDDLER: RawDisplay truncated at 16384 characters. Right-click to disable truncation. ***

返回:



HTTP/1.1 200 OK
Server: nginx
Date: Sat, 06 Aug 2011 06:09:24 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Powered-By-YlmF: CN-DG-TEL-UP-6
Content-Length: 139

{"state":0,"message":"\u670d\u52a1\u5668\u6269\u5c55\u53d1\u751f\u5f02\u5e38\uff0c\u8bf7\u901a\u77e5\u7ba1\u7406\u5458\u3002","code":10016}


这是为什么呢? 难道还有添加什么?



...全文
260 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ArcRain 2011-08-08
  • 打赏
  • 举报
回复
InternetWriteFile不会帮你传upBody的数据。
因为你上传文件,相对的Post数据量也就大了,因此建议你upBody的数据也用InternetWriteFile传。
HttpSendRequestExA只负责传Http头,其他部分都用InternetWriteFile来传()。
BufferIn.lpvBuffer = NULL;
BufferIn.dwBufferLength = 0;
BufferIn.dwBufferTotal = iSize+upBody.length();

InternetWriteFile... upBody
InternetWriteFile... file
职业炒股 2011-08-08
  • 打赏
  • 举报
回复
现在抓包情况是这样的:
POST http://up.u.115.com/upload HTTP/1.1
Accept: text/*
Content-Type: multipart/form-data; boundary=----------TNtOyVSY4wO3nxjzCZLLdDd1lQA2Gd
User-Agent: Shockwave Flash
Host: up.u.115.com
Pragma: no-cache
Content-Length: 456
Cookie: CUS_2364079=1; OOFL=wct511%40126.com; OOFO=%7B%22active_time%22%3A1312774262%2C%22app%22%3A%22u%22%2C%22birthday%22%3A%220000-00-00%22%2C%22gender%22%3A%22%22%2C%22location%22%3A%220%22%2C%22login_ip%22%3A%22218.17.55.167%22%2C%22login_time%22%3A1312774262%2C%22user_id%22%3A%222364079%22%2C%22sign%22%3A%229e4f470a20275f1bcfab05058a83a533%22%7D; OOFA=%2507%2504WRVU%2508%250C%2512r%250DGwQ%2513%250As%251D%2523%255C%251C%250Cq%2540%250A%2527X%2512%2500%2515%250D%2502%2504wPTPLRYZ%250D%2509Q%2507P%2501%2505%2506%250APV%2503V%250B%2500%2504%2500U%2506TP%255EP%2501%2501%2505%2505U%2507%2506%2500%250E%250E%250F%255B%250E%2504R%2503T%255BPR%250F

------------TNtOyVSY4wO3nxjzCZLLdDd1lQA2Gd(此处是随机序列号,自己可以得到)
Content-Disposition: form-data; name="Filename"

115.txt
------------TNtOyVSY4wO3nxjzCZLLdDd1lQA2Gd
Content-Disposition: form-data; name="aid"

1
------------TNtOyVSY4wO3nxjzCZLLdDd1lQA2Gd
Content-Disposition: form-data; name="cookie"


------------TNtOyVSY4wO3nxjzCZLLdDd1lQA2Gd
Content-Disposition: form-data; name="Filedata"; filename="115.txt"
Content-Type: application/octet-stream

���������

正常的应该是:
POST http://up.u.115.com/upload HTTP/1.1
Accept: text/*
Content-Type: multipart/form-data; boundary=----------ae0ae0KM7cH2gL6Ef1ae0ae0Ij5Ij5
User-Agent: Shockwave Flash
Host: up.u.115.com
Content-Length: 792
Connection: Keep-Alive
Pragma: no-cache
Cookie: OOFL=wct511%40126.com; OOFO=%7B%22active_time%22%3A1312773235%2C%22app%22%3A%22u%22%2C%22birthday%22%3A%220000-00-00%22%2C%22gender%22%3A%22%22%2C%22location%22%3A%220%22%2C%22login_ip%22%3A%22218.17.55.167%22%2C%22login_time%22%3A1312773235%2C%22user_id%22%3A%222364079%22%2C%22sign%22%3A%225e9c23cb221b4a9ff064294e1733bfb2%22%7D; OOFA=%2507%2504WRVU%2508%250C%2512r%250DGwQ%2513%250As%251D%2523%255C%251C%250Cq%2540%250A%2527X%2512%2500%2515%250D%2502%2504wPTPLRYZ%250D%2509Q%2507P%2501%2505%2501%250AUQ%2503%2503%250BRP%255D%2500V%2506P%2509%2503%2501%2503YRRQ%2508%2506UT%250CRRU%2506%2505%2504%250C%2504%2500%250F; CUS_2364079=1

------------ae0ae0KM7cH2gL6Ef1ae0ae0Ij5Ij5
Content-Disposition: form-data; name="Filename"

115.txt
------------ae0ae0KM7cH2gL6Ef1ae0ae0Ij5Ij5
Content-Disposition: form-data; name="aid"

1
------------ae0ae0KM7cH2gL6Ef1ae0ae0Ij5Ij5
Content-Disposition: form-data; name="cookie"

%07%04WRVU%08%0C%12r%0DGwQ%13%0As%1D%23%5C%1C%0Cq%40%0A%27X%12%00%15%0D%02%04wPTPLRYZ%0D%09Q%07P%01%05%01%0AUQ%03%03%0BRP%5D%00V%06P%09%03%01%03YRRQ%08%06UT%0CRRU%06%05%04%0C%04%00%0F
------------ae0ae0KM7cH2gL6Ef1ae0ae0Ij5Ij5
Content-Disposition: form-data; name="Filedata"; filename="115.txt"
Content-Type: application/octet-stream

123456789
------------ae0ae0KM7cH2gL6Ef1ae0ae0Ij5Ij5
Content-Disposition: form-data; name="Upload"

Submit Query
------------ae0ae0KM7cH2gL6Ef1ae0ae0Ij5Ij5--
职业炒股 2011-08-08
  • 打赏
  • 举报
回复

string pHeader = ("Accept: text/*\r\nContent-Type: multipart/form-data; boundary=----------");
string strTemp = "";
randchar(strTemp);
pHeader.append(strTemp);
pHeader.append("\r\nUser-Agent: Shockwave Flash\r\nHost: up.u.115.com\r\nConnection: Keep-Alive\r\nPragma: no-cache\r\n\r\n");

/*------------------------INTERNET_BUFFERSA中lpvBuffer的内容-----------------------------*/

string upBody = "------------";
upBody.append(strTemp);
upBody.append("\r\nContent-Disposition: form-data; name=\"Filename\"\r\n\r\n");
upBody.append("115.txt\r\n");
upBody.append("------------");
upBody.append(strTemp);
upBody.append("\r\nContent-Disposition: form-data; name=\"aid\"\r\n\r\n");
upBody.append("1\r\n");
upBody.append("------------");
upBody.append(strTemp);
upBody.append("\r\nContent-Disposition: form-data; name=\"cookie\"\r\n\r\n");
//upBody.append(此处有cookie不会添加 只差这关键一步)
upBody.append("\r\n------------");
upBody.append(strTemp);
upBody.append("\r\nContent-Disposition: form-data; name=\"Filedata\"; filename=\"115.txt\"\r\n");
upBody.append("Content-Type: application/octet-stream\r\n\r\n");


const char *pupBody=upBody.c_str();
int upBodyLen=static_cast <DWORD> (strlen(pupBody));


INTERNET_BUFFERSA BufferIn;
BufferIn.dwStructSize = sizeof(INTERNET_BUFFERS);
BufferIn.Next = NULL;
BufferIn.lpcszHeader = const_cast<char *>(pHeader.c_str());
const char *pHeaderLen=pHeader.c_str();
BufferIn.dwHeadersLength = static_cast <DWORD> (strlen(pHeaderLen));
BufferIn.dwHeadersTotal = static_cast <DWORD> (strlen(pHeaderLen));
BufferIn.lpvBuffer = const_cast<char *>(upBody.c_str());
const char *pBufferLen=upBody.c_str();
BufferIn.dwBufferLength = static_cast <DWORD> (strlen(pBufferLen));
BufferIn.dwBufferTotal = iSize+BufferIn.dwBufferLength; //这里是你要传送数据的总大小,比如一个文件的大小::GetFileSize(hFile, 0)

if(!HttpSendRequestExA(hRequest3, &BufferIn, NULL, 0, 0))
{
printf( "Error on HttpSendRequestEx %d\n",GetLastError() );
return FALSE;
}

/*-------------------上传文件----------------------*/
const DWORD cBuffsize = 1024;
TCHAR* buffer = new TCHAR[cBuffsize];
DWORD dwRead;
printf( "\n n最大是%d",BufferIn.dwBufferTotal/1024 );
for(int n=1; n<=(int)BufferIn.dwBufferTotal/1024+1; n++)
{
if(!InternetWriteFile(hRequest3, buffer, cBuffsize, &dwRead));
printf("\nError on InternetWriteFile %d",GetLastError());
printf( "\r%d bytes sent.", n*1024);

}
职业炒股 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dream238 的回复:]
你的InternetWriteFile怎么用的?InternetWriteFile除了需要传文件,还需要传
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="Filename"
....
这些东西。
[/Quote]

InternetWriteFile会自动给我传------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="Filename"
这些东西?

它好像只会传我们指定的文件吧? 其他东西我是不是应该添加在INTERNET_BUFFERSA BufferIn; 的buffer里面?

楼下给出编码 和抓包 大家看一下
zhuang_bx 2011-08-08
  • 打赏
  • 举报
回复
HttpSendRequest(FRequest, HTTP头部, 头部长度, 要提交的数据, 数据长度);
ArcRain 2011-08-08
  • 打赏
  • 举报
回复
你的InternetWriteFile怎么用的?InternetWriteFile除了需要传文件,还需要传
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="Filename"
....
这些东西。
职业炒股 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dream238 的回复:]
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="Filename"

vs2010教程.doc
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="aid"

1……
[/Quote]

确实是这样额。。。这也算是文本内容 那我应该怎么组装啊。。。
httpsendrequestEXA根本不行
直接internetwritefile只会传文件

我这个文本内容应该怎么组装额。。。 求教了
职业炒股 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dream238 的回复:]
InternetWriteFile不会帮你传upBody的数据。
因为你上传文件,相对的Post数据量也就大了,因此建议你upBody的数据也用InternetWriteFile传。
HttpSendRequestExA只负责传Http头,其他部分都用InternetWriteFile来传()。
BufferIn.lpvBuffer = NULL;
BufferIn.dwBufferLe……
[/Quote]
O 明白了
还可以这样子分开传啊。。。
ArcRain 2011-08-06
  • 打赏
  • 举报
回复
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="Filename"

vs2010教程.doc
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="aid"

1
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="cookie"

%07%04WRVU%08%0C%12r%0DGwQ%13%0As%1D%23%5C%1C%0Cq%40%0A%27X%12%00%15%0D%02%04wPTPLRYZ%0D%09Q%07P%00%03%02%01WU%03%0C%00T%0BU%03%06%06Y%08W%0D%00QVWU%06%07%0E%03%0B%01%07%00%05%03%01%0E%00%02%0A
------------ae0GI3cH2GI3cH2gL6Ef1Ef1GI3ae0
Content-Disposition: form-data; name="Filedata"; filename="vs2010教程.doc"
Content-Type: application/octet-stream

以上这些内容都应该用InternetWriteFile在写上传文件的数据前写入,它算作上传的数据内容。
职业炒股 2011-08-06
  • 打赏
  • 举报
回复
很纠结!!!
下面应该是程序本身在客户端添加的内容
使我的传输文件大小还大了1KB

可是我自己加上去的话 bufferin的头部就变大了
就会出现HttpSendRequestExA(hRequest, &BufferIn, NULL, 0, 0))错误
郁闷啊!!!
LuciferStar 2011-08-06
  • 打赏
  • 举报
回复
在session里就直接有cookie,不需要里另外组装发送。
职业炒股 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaoguailong3 的回复:]
你把请求弄得和成功的一摸一样就好了
[/Quote]

我也想啊。。。。。这个是手动的吗?
这个cookie的值 %07%04WRVU%08%0C%12r%0DGwQ%13%0As%1D%23%5C%1C%0Cq%40%0A%27X%12%00%15%0D%02%04wPTPLRYZ%0D%09Q%07P%00%03%02%01WU%03%0C%00T%0BU%03%06%06Y%08W%0D%00QVWU%06%07%0E%03%0B%01%07%00%05%03%01%0E%00%02%0A
我怎么读取额。。。从文本取出来很麻烦。。。。
xiaoguailong3 2011-08-06
  • 打赏
  • 举报
回复
你把请求弄得和成功的一摸一样就好了

18,356

社区成员

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

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