I do not understand the post, some time ago encountered a need to send a POST request in C # code to upload a file business, so reference several posts, coupled with their own practice to write the following code. Write the comparison low hope you greatly corrected ^_^.
Business requirements:
The other side gave an interface, let pass four parameters for "ModelID, Filecontent, UpdateTime, encrypt"
Where ModelID, UpdateTime, and encrypt are common string types . Filecontent is a binary file
I really do not understand the post of the relevant knowledge, usually just ordinary usage, no deep read the relevant knowledge.
So I use the HTML page to write a form form submission, and then intercept to see the request header and the content of the request body (this is just a normal text file so fileconten can display ordinary text, If it's a picture or something like this, it's garbled.
This is where I think it's more important.
Looking at this information, I can tell
In the request header:
Content-type:multipart/form-data
Boundary=ceshi( sense should be the meaning of the delimiter, "Ceshi" is I casually write )
Because ultimately the send request Flow , the contents of these request bodies need to be written into the request stream, although some things string this text type of data, but the file itself is binary, so I put all the text into binary, Plus the file itself ,
It then writes the request stream in the order of this format , and finally sends it out ( if it does not become binary, only text-type file uploads can be made, with a lot of restrictions, and easy to corrupt the file ).
The code is as follows:
Send the 2.html file under the C drive (images, PDFs, etc. are also available, as all are turned into binary) have been tested
Private voidPost1 () {stringURL =@"http://*******";//we're not going to expose our address here. stringModelID ="4f1e2e3d-6231-4b13-96a4-835e5af10394"; stringUpdateTime ="2016-11-03 14:17:25"; stringEncrypt ="f933797503d6e2c36762428a280e0559"; stringFilePath =@"c:/2.html"; stringFileName ="2.html"; byte[] Filecontentbyte =New byte[1024x768];//file content binary #regionTurn files into binaryFileStream FS=NewFileStream (FilePath, FileMode.Open, FileAccess.Read); Filecontentbyte=New byte[FS. Length];//Binary FilesFs. Read (Filecontentbyte,0, Convert.ToInt32 (fs. Length)); Fs. Close (); #endregion #regionDefine the content in the request body and turn it into binarystringBoundary ="Ceshi"; stringEnter ="\ r \ n"; stringModelidstr ="--"+ Boundary +Enter+"content-disposition:form-data; name=\ "modelid\""+ Enter +Enter+ ModelID +Enter; stringFilecontentstr ="--"+ Boundary +Enter+"Content-type:application/octet-stream"+Enter+"Content-disposition:form-data, name=\ "filecontent\"; filename=\ ""+ FileName +"\""+ Enter +Enter; stringUpdatetimestr = Enter +"--"+ Boundary +Enter+"content-disposition:form-data; name=\ "Updatetime\""+ Enter +Enter+UpdateTime; stringEncryptstr = Enter +"--"+ Boundary +Enter+"content-disposition:form-data; name=\ "Encrypt\""+ Enter +Enter+ Encrypt + Enter +"--"+ Boundary +"--"; varModelidstrbyte = Encoding.UTF8.GetBytes (MODELIDSTR);//ModelID all strings in binary varFilecontentstrbyte = Encoding.UTF8.GetBytes (FILECONTENTSTR);//filecontent binary of information such as some names (not including the file itself) varUpdatetimestrbyte = Encoding.UTF8.GetBytes (UPDATETIMESTR);//UpdateTime all strings in binary varEncryptstrbyte = Encoding.UTF8.GetBytes (ENCRYPTSTR);//encrypt all strings in binary #endregionHttpWebRequest Request=(HttpWebRequest) webrequest.create (URL); Request. Method="POST"; Request. ContentType="multipart/form-data;boundary="+boundary; Stream Myrequeststream= Request. GetRequestStream ();//defining the request Flow #regionConvert each binary sequence write request stream modelidstr, Uodatetimestr, encryptstr (Filecontentstr + filecontent)Myrequeststream.write (Modelidstrbyte,0, modelidstrbyte.length); Myrequeststream.write (Filecontentstrbyte,0, filecontentstrbyte.length); Myrequeststream.write (Filecontentbyte,0, filecontentbyte.length); Myrequeststream.write (Updatetimestrbyte,0, updatetimestrbyte.length); Myrequeststream.write (Encryptstrbyte,0, encryptstrbyte.length); #endregionHttpWebResponse Response= (HttpWebResponse) request. GetResponse ();//SendStream Myresponsestream= Response. GetResponseStream ();//Get return valueStreamReader Mystreamreader =NewStreamReader (Myresponsestream, Encoding.GetEncoding ("Utf-8")); stringRetString =Mystreamreader.readtoend (); Mystreamreader.close (); Myresponsestream.close (); }
The code has been tested and has been used. This is a modified version, removed some other things, is only for reference role.
If there is any shortage, please correct me greatly.
C # code, simulate form form send POST request, upload file (with other parameters)