18,356
社区成员
发帖
与我相关
我的任务
分享
try
{
pHttpConnection = Session.GetHttpConnection(defServerName,nPort);
pHTTP = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, defObjectName);
pHTTP->AddRequestHeaders(MakeRequestHeaders(strHTTPBoundary));
pHTTP->SendRequestEx(dwTotalRequestLength, HSR_SYNC | HSR_INITIATE);
#ifdef _UNICODE
pHTTP->Write(W2A(strPreFileData), strPreFileData.GetLength());
#else
pHTTP->Write((LPSTR)(LPCSTR)strPreFileData, strPreFileData.GetLength());
#endif
dwReadLength = -1;
while (0 != dwReadLength)
{
strDebugMessage.Format("%u / %u\n", fTrack.GetPosition(), fTrack.GetLength());
TRACE(strDebugMessage);
dwReadLength = fTrack.Read(pBuffer, dwChunkLength);
if (0 != dwReadLength)
{
pHTTP->Write(pBuffer, dwReadLength);
}
}
CInternetSession Session("PostFile");
CHttpConnection *pHttpConnection = NULL;
INTERNET_PORT nPort = 80;
CFile fTrack;
CHttpFile* pHTTP;
CString strHTTPBoundary;
CString strPreFileData;
CString strPostFileData;
DWORD dwTotalRequestLength;
DWORD dwChunkLength;
DWORD dwReadLength;
DWORD dwResponseLength;
TCHAR szError[MAX_PATH];
void* pBuffer;
LPSTR szResponse;
CString strResponse;
BOOL bSuccess = TRUE;
CString strDebugMessage;
if (FALSE == fTrack.Open(_mFilePath, CFile::modeRead | CFile::shareDenyNone))
{
//MessageBoxW(NULL, pBuffer, L"Text", MB_OK); //显示
MessageBox(NULL,"Unable to open the file.","Text",MB_OK);
return FALSE;
}
Content-Type: multipart/form-data; boundary=GASDHSAFSAFBDSNVKSDGIDSJGSDGKDSHG
--GASDHSAFSAFBDSNVKSDGIDSJGSDGKDSHG
Content-Disposition: form-data;name="pic";filename="C:\test.jpg"
Content-Type: image/pjpeg
Content-Transfer-Encoding: binary
?? JFIF ? C (B+(%%(Q:=0B`Ued_U][jx檨jq恠[]叺啇灒玤€忌害菣ǐ?? C(#(N++N]nいいいいいいいいいいいいいいいいいいいいいいいいい? ? ?" ? ? < !1AQ"2aq態”?R?b裂%3CDTr倰擇? ? ! !1AQ"aq? ? 鷋垁垐垁垜wTRX€r|爓pL沙庘瓕+@钊??~>X軴?玹"M;T商缮蕓l+EB煄?滓K.鰈?碇?\姚%〦y椯燮m?'測哺w !糓躏?蟧?咣?轏uTGi?畒H烌q咲w搱0睶&?#Q+?岯r俴A?j?sw 彍攄讂6>?"G聦u㎡.藋収楣H!旪f萌~vz″??鬖艿_Ny腺bI晫?蘀蔅xχ铁}嫦
嵌nJ昻??諹誓轻穋\?n轜6?戔?}旌黩;殦/m^麐爃蒍岎阌趽鬄┠p??9嗘?lVc謜楯殧N嘲@DDD@DDD@DDD@H桖N;?? d虈额*舚-皎
u"Ac'婻杧} 式倔?夤Gy.:罼僮謃牧?皵?~怖]F蚟兺稦谤梥,/耝卣U\塸U<; 肧 €?p^g|d趑?凢栢鈥}嘂(o?鸒1撃鹕9?魩颻B>z?l羅Y0誰L鼃癕#胳D?f鎝谋糪S禊?暨諫埐?3G&@篁o渋?%(DDD@DDD@DD?rS?屽?j ?銸]槩徟2?V獛顀鶰Z隞怶Z匭?_嘼.2?髙蝳L? 蕴('b&? """ p?"錞司G缀鄒滏??樶?N黬鷖?牂淿趶h秦全?蘻KXY#+籉?鱻?rOz?凞@DDD@DD窋?頊t洲鮴┛ぶce餰鵜^v趖~_?I蛟{N?摫@DDD@DD&?媎b灂?J区~?另1搁?&PR?猩I糌R轏Q貓€垐垁垐9gX題?晔彊冱咫诪部??k詞*堠?神Zc挫囗;4%啝wq皘鎫f3阝靗僝?Xz=8}鱘dPjt:?蘄ɑ8H絁?Φ嘆eU崗X?表Gl寢X賎袽=激 擭N?{L?滭&哳鑿笟嚧蹄?勢? ~bJO+?j慂?旛搂Z毙?
僤趄摙+T翑鶊冎"%垁垐'BV任?窄貤n迹葄?赾g悖d踀"趾逆p9u弦KF?陨?嶆P荎h馭?)c哾洬澅AⅪ<刚N曌桯儾荤%#U{N腾
??K薫`
??鳁D鼓香c瘀矠孹.?3谝|]l摃?瓣b篪Y清?[f=玛?lu鯚SVC緐旈BV奜蚱?T?J坣鉲H?]M蚆€r?鶉襓,媙綏&沶zQ羫??溗W?!jz鶖佋渿饀玍c^鮚~+^o貄=i镐[a厄4\糸+,键媠,&芔G要? &?蕓渂\u党?騲???!OC=kDU?k?跳k甞C -蔄堝*z铷杹$
塯-f蘈鰳?v諒姧薅芽ぶg
7@?#噯吴7f0軭9*'觚R}D ??W?柕R?w護脊镣~仕P?睍厷孢s垭'w坪??课孉灅x媺["?3%粧d摫f"&? ""堙暶?灞澰呭`诉F]?T覕V+? ?┢?j?mv蓉苄?r麱绿?Z#"€
諂FV竀eu?塻h) v咤=鴰%?赜r巑鷫鍧`舌藨W殇w 震栈嵨
??曫2n葼=詘G宿涚-?拴8塆;僻bJ頔玈躰zO泹=偠硵o?S 叇?k ?u3隠?珰髌莖??闘袢头?#鉟B惑?模冈經栐Y^6=\髫(? fC聳n譵8闂o噑i玣逫睆B裐BT箩??"觺Cws貄€? N腗D@DDD@DDD@蚬y懬獞鵏?嫅?2?s4浌橒嬆p阬Z睌卻薻7虎w劭溚"?;b猊-g圵?讥笴勢nF[{r[?髼鍍?(DD?vA肪?r?賐?簂欐銢??s;_疝奶誥l*璷︺?媇慡琕?v搠24 酀?垁垐垁垜鎋X?a?穗 〥媲瑆?嶪澧骠B)?濠|k憕&F闐???曲o髿S嵴=4脏U 藎弥"飅D媲瑅攙' ?劝?鄲<鄁T8禡D.@?iv歬j@嫿镕频嘎d?ā]仵檺〥婺煨D?€A??剚??i檻炟焖鄮m嶢編7腚4蟘13暙?Y碛x巼╚繑??9r式墤e蛂跴@枸?<?鶔膄眑+畀狨瀨=Z埏綐0刈&鵺|僩禌5D'8駡>~Bf逈?錬?9?]? ?趞?砵B捏巆a?怪礲茾u&k嶉焄屷蔋? 桙D挼┑?敥??
?b'蟚nQ箵U鴿u駕/?*z\';u瓘湺拊?脄虢梃萹桥_qP?軦鶭?蕮欃v蟧*兵簫蝢U#U唚n絬M齯归贤砦楌2??z(?3r覛,*殁(鳬膂?;?時(u??]瓒袃D?冧7-古' }_o肧*基妔ht賀鶲;螳K攣广亽盓蘒蚤
_#*dV韈?箟登蘫B-闉<%錯iS沋苍vD鍉U骶.侺^*蕐~
谨? 蔰袬?鑊9PX净 妍?A6苭祏Z +:,In懌藙軏橓第*!琑羬?鐡栐轚S?梥?U.鍣??攗:? 玟╊B Q暮?%縌,遦
蚠!]v;e蝍+?騝2襴絽瀪蠠 5_{塪鍁t硊玗N绋PL辰?j?氡逤=)?耦K巰&ひ敗H?A;覎G~R鋿y疪??齡潿Me┯督藿蜕?'-K/*uU ?听L薛ァ?U簉檰&@緟砕'?囈%~宗鳰退?棧焅瑡耀瘊]l_y|C??躂泭碻諑挠?u]?9烁}7?砮傭忂鯑釲]华Tp蘾w2o齡甆7碦?*?yK[m趥?B幚jU~屩5湦3?.母Kg匤竨副? c粼頝9Z駑毙:2訧摿穧圳祒U株闔*紵Q;nv怎瀬?S,Dyx
u挺+貞贏1/k?豮╈%垊菂X芦-uc?橗?豼6@紡? ?楷?姧W签赵?8€瀹@b?蹧瑪?i?F鏱y~r/_22?H铸'?1謯V挫o?遲垐垁垐垁垐垁垐 葓
貓垁垐垁垐?
--GASDHSAFSAFBDSNVKSDGIDSJGSDGKDSHG--
中间的乱码就是发送的图片的数据。。。,可能是服务器后台不处理,所以就这样了。。。。。http://www.test/game/upload.php?"+"userid=hello&userpic=world
这样的一个连接,但是我要上传图片这个服务器。。。
如果单单是提交账号和密码的的话,可以直接提交,但是像这样既有这样的参数提交,又要提交一个图片。。。从https://my.oschina.net/u/1014520/blog/194539
可以找到这样的说明,普通提交参数的Post请求application/x-www-form-urlencoded是这样的方式,但是Post文件的格式却是以multipart/form-data,所以发送前面的那两个参数,应该是
Content-Type: application/x-www-form-urlencoded
userid=Hello&userpic=name
但是发送后面的图片,发送的是
--GASDHSAFSAFBDSNVKSDGIDSJGSDGKDSHG
Content-Disposition: form-data;name="Hello";filename="test"
Content-Type: image/pjpeg/r/nContent-Transfer-Encoding: binary
....图片的内容
--GASDHSAFSAFBDSNVKSDGIDSJGSDGKDSHG--
,所以请求头,应该怎么填写??
还是Content-Type: multipart/form-data; boundary=GASDHSAFSAFBDSNVKSDGIDSJGSDGKDSHG
这样么?
假如是这样,会不会跟Content-Type: application/x-www-form-urlencoded
,发送普通数据的矛盾了?
我猜70%是我填写错这个东西,所以才传不了。。。Content-Disposition: form-data; name="trackdata"; filename="test.jpg"
Content-Type: image/pjpeg
Content-Transfer-Encoding: binary
Content-Disposition: form-data; name="submitted"
不太熟悉这方面的东西,我单步过,每一步走执行正常,难道是服务器处理的问题?但是服务器能读到我其提交的其他参数。我打开了一个类似www.baidu/upload?userid=hello&picname=test这样的请求,,服务器读取到hello和test这两个参数。。
try
{
INTERNET_PORT nPort = 80;
DWORD dwRet = 0;
CHttpConnection* pServer = session.GetHttpConnection(hostName.c_str(), nPort); //跟服务器连接,指定80端口
CHttpFile* pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, pathName.c_str()); //post方式打开请求
CString HeadPost("Content-Type:multipart/form-data;boundary=ZnAAAAAAAAAAGpDtePMx0KrHh_G0X99Yef9r8JZsRJSXC\r\n");
CString FilePost("Content-Disposition: form-data;name=\"test.jpg\"; filename=\"C:\\test.jpg\"\r\n\r\n");
FilePost+="Content-Type: image/pjpeg\r\n";
FilePost+="Content-Transfer-Encoding:binary\r\n";
pFile->AddRequestHeaders(HeadPost); //增加到请求头
CString PreBoundaryPost("--ZnAAAAAAAAAAGpDtePMx0KrHh_G0X99Yef9r8JZsRJSXC\r\n");
CString LastBoundaryPost("--ZnAAAAAAAAAAGpDtePMx0KrHh_G0X99Yef9r8JZsRJSXC--\r\n");
//读取文件
if (FALSE == f.Open("C:\\test.jpg", CFile::modeRead | CFile::shareDenyNone))
{
MessageBox(NULL,"Unable to open the file.","Text",MB_OK);
return FALSE;
}
int gloLen=HeadPost.GetLength()+PreBoundaryPost.GetLength()+FilePost.GetLength()+f.GetLength()+LastBoundaryPost.GetLength();
pFile->SendRequestEx(gloLen,HSR_SYNC | HSR_INITIATE); //发送数据的大小
CFile f1;
f1.Open("C:\\2.dat",CFile::modeCreate |CFile::modeWrite);
f1.Write(HeadPost,HeadPost.GetLength());
pFile->Write((LPSTR)(LPCSTR)HeadPost,HeadPost.GetLength()); //写入请求头,包括boundary的格式
f1.Write(PreBoundaryPost,PreBoundaryPost.GetLength());
pFile->Write((LPSTR)(LPCSTR)PreBoundaryPost,PreBoundaryPost.GetLength()); //写入前边界
f1.Write(FilePost,FilePost.GetLength());
pFile->Write((LPSTR)(LPCSTR)FilePost,FilePost.GetLength()); //写入文件信息
//写入文件内容
DWORD dwReadLength = -1;
pBuffer=malloc(64*10240);
while (0 != dwReadLength)
{
dwReadLength = f.Read(pBuffer, f.GetLength());
if (0 != dwReadLength)
{
pFile->Write(pBuffer, dwReadLength);
}
}
f1.Write(pBuffer, f.GetLength());
pFile->Write((LPSTR)(LPCSTR)LastBoundaryPost,LastBoundaryPost.GetLength()); //写入后边界
f1.Write(LastBoundaryPost,LastBoundaryPost.GetLength());
f1.Close();
pFile->EndRequest(HSR_SYNC);
DWORD dwResponseLength = pFile->GetLength();
LPSTR szResponse=NULL;
CString strResponse("");
while (0 != dwResponseLength)
{
szResponse = (LPSTR)malloc(dwResponseLength + 1);
szResponse[dwResponseLength] = '\0';
pFile->Read(szResponse, dwResponseLength);
strResponse += szResponse;
free(szResponse);
dwResponseLength = pFile->GetLength();
}
MessageBox(NULL,strResponse,"网页应答数据",MB_OK);
}
等我学会这个项目就结了,今天之内必须搞好的。 建议楼主先学会使用抓包软件比如wireshark
建议楼主先学会使用抓包软件比如wireshark