日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

转:vc中如何通过http的post方式上传文件

發布時間:2025/3/20 c/c++ 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:vc中如何通过http的post方式上传文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章引自:http://blog.myspace.cn/e/404248359.htm

vc中如何通過http的post方式上傳文件

HTTP響應 ?
? 在接收和解釋請求消息后,服務器會返回一個HTTP響應消息。 ?
? ?
? 與HTTP請求類似,HTTP響應也是三個部分組成,分別是: ?
? 狀態行、消息報頭、響應正文。 ?
? ?
? 狀態行: ?
? 狀態行由協議版本、數字形式的狀態代碼、及相應的狀態描述,各元素之間以空格分隔。 ?
? ?
? 格式: ? ? ? HTTP-Version ? Status-Code ? Reason-Phrase ? CRLF ?
? ?
? 例如: ? ? ? HTTP/1.1 ? 200 ? OK ? \r\n ?
? ?
? 狀態代碼: ?
? 狀態代碼由3位數字組成,表示請求是否被理解或被滿足。 ?
? ?
? 狀態描述: ?
? 狀態描述給出了關于狀態代碼的簡短的文字描述。 ?
? ?
? 狀態代碼的第一個數字定義了響應的類別,后面兩位沒有具體的分類。 ?
? 第一個數字有五種可能的取值: ?
? - ? 1xx: ? ? 指示信息—表示請求已接收,繼續處理。 ?
? - ? 2xx: ? ? 成功—表示請求已經被成功接收、理解、接受。 ?
? - ? 3xx: ? ? 重定向—要完成請求必須進行更進一步的操作。 ?
? - ? 4xx: ? ? 客戶端錯誤—請求有語法錯誤或請求無法實現。 ?
? - ? 5xx: 服務器端錯誤—服務器未能實現合法的請求。 ?
? ?
? ?
? 狀態代碼 狀態描述 說明 ?
? ? ? 200 ? ? ? OK 客戶端請求成功 ?
? ? ? 400 ? ? ? ? ? ? ? Bad ? Request 由于客戶端請求有語法錯誤,不能被服務器所理解。 ?
? ? ? 401 ? ? ? ? ? ? ? Unauthonzed 請求未經授權。這個狀態代碼必須和WWW-Authenticate報頭域一起使用 ?
? ? ? 403 Forbidden 服務器收到請求,但是拒絕提供服務。服務器通常會在響應正文中給出不提供服務的原因 ?
? ? ? 404 Not ? Found 請求的資源不存在,例如,輸入了錯誤的URL。 ?
? ? ? 500 ? ? ? Internal ? Server ? Error 服務器發生不可預期的錯誤,導致無法完成客戶端的請求。 ?
? ? ? 503 ? ? ? ? Service ? Unavailable 服務器當前不能夠處理客戶端的請求,在一段時間之后,服務器可能會恢復正常。

HTTP消息 ?
? HTTP消息由客戶端到服務器的請求和服務器到客戶端的響應組成。請求消息和響應消息都是由開始行,消息報頭(可選的),空行(只有CTLF的行),消息正文(可選的)組成。 ?
? 對于請求消息,開始行就是請求行。 ?
? 對于響應消息,開始行就是狀態行。 ?
? ?
? ?
? 消息報頭 ?
? HTTP消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。 ?
? 每一個報頭域都是由(名字+":"+空格+值)組成,消息報頭域的名字是大小寫無關的。 ?
? ?
? ?
? ?
? 普通報頭: ?
? 在普通報頭中,有少數報頭域應用于所有的請求和響應消息,但并不用于被傳輸的實體,這些報頭域只用于傳輸的消息。 ?
? 常用的普通報頭域:Cache-Control,Date,Connection,Pragma. ?
? ?
? ?
? ?
? 請求報頭: ?
? 請求報頭允許客戶端向服務器端傳遞該請求的附加信息以及客戶端自身的信息。 ?
? 常用的請求報頭域: ?
? Accept ?
? ? ? ? Accept請求報頭域用語指定客戶端接受哪些類型的信息。例如:Accept: ? image/gif,表明客戶端希望接受GIF圖象格式的資源;Accept: ? text/html,表明客戶端希望接受html文本。 ?
? Accept-Charset ?
? ? ? ? Accept-Charset請求報頭域用于指定客戶端接受的字符集。例如:Accept-Charset: ? ios-8859-1,gb2312。如果在請求消息中沒有設置這個域,缺省是任何字符集都可以接受。 ?
? Accept-Encoding ?
? ? ? ? Accept-Encoding請求報頭域類似Accept,但是它是用于指定可接受的內容編碼。例如:Accept-Encoding: ? gzip,deflate。如果請求消息中沒有設置這個域,服務器假定客戶端對各種內容編碼都可接受。 ?
? Accept-Language ?
? ? ? ? Accept-Language請求報頭域類似于Accept,但是它是用于指定一種自然語言。例如:Accept-Language: ? zh-cn。如果請求消息中沒有設置這個域,服務器假定客戶端對各種語言都可接受。 ?
? Authorization ?
? ? ? ? Authorization請求報頭域主要用于證明客戶端有權查看某個資源。當瀏覽器訪問一個頁面時,如果收到服務器的響應代碼為401(未授權),可以發送一個包含Authorization請求報頭域的請求,要服務器對其進行驗證。 ?
? Host ?
? ? ? ? Host請求報頭域主要用于指定被請求資源的Internet主機和端口號,它通常是從HTTP ? URL中提取出來的。 ?
? 例如:http://www.sunxin.org/index.html。瀏覽器發送的請求消息中,就會包含Host請求報頭域,如下:Host: ? www.sunxin.org ?
? 后面沒有跟端口號,表明使用的是缺省端口號80,如果端口號不是80,那么就要在主機名后面加上一個冒號(":"),然后接上端口號,例如: ?
? Host: ? www.sunxin.org:8080。 ? ? 要注意的是,在發送HTTP請求的時候,這個報頭域是必須的。 ?
? User-Agent ?
? ? ? ? User-Agent允許客戶端將它的操作系統瀏覽器和其他屬性告訴服務器。我們上網登陸論壇的時候,往往看到些歡迎信息,其中列出了你的操作系統的名稱和版本等等信息。原因是:服務器從User-Agent請求報頭域中獲取的這些信息,自己編寫瀏覽器可以不用這個請求報頭域。服務器就無法得知了。

由于帖子不能連續發送3次以上,所以我又申請了個號過來繼續發,要是給分,就只給在wf520pb上啊,呵呵。。。 ?
? ?
? -------------------------------------------------- ?
? 響應報頭 ?
? 響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息,以及關于服務器的信息和對Request-URI所標識的資源進行下一步訪問的信息。 ?
? 常用的響應報頭域: ?
? Location ?
? ? ? ? Location響應報頭域用于重定向接受者到一個新的位置。例如:客戶端所請求的頁面已不存在原先的位置,為了讓客戶端重定向到這個頁面新的位置,服務器端可以發回Location響應報頭后使用重定向語句,讓客戶端去訪問新的域名所對應的服務器上的資源。當我們在JSP中使用重定向語句的時候,服務器端向客戶端發回的響應報頭中,就會有Location響應報頭域。下面是Location響應報頭域的一個例子:Location: ? http://www.sunxin.org ?
? Server ?
? ? ? ? Server響應報頭域包含了服務器用來處理請求的軟件信息。它和User-Agent請求報頭域是相對應的,前者發送服務器端軟件的信息,后者發送客戶端軟件(瀏覽器)和操作系統的信息。下面是Server響應報頭域的一個例子:Server: ? Apache-Coyote/1.1 ?
? WWW-Authenticate ?
? ? ? ? WWW-Authenticate響應報頭域必須被包含在401(未授權的)響應消息中,這個報頭域和前面講到的Authorization請求報頭域是相關的,當客戶端收到401響應消息,就要決定是否請求服務器對其進行驗證。如果要求服務器對其進行驗證,就可以發送一個包含了Authorization報頭域的請求,下面是WWW-Authenticate響應報頭域的一個例子:WWW-Authenticate: ? Basic ? realm="Basic ? Auth ? Test!" ?
? 從這個響應報頭域,可以知道服務器端對我們所請求的資源采用的是基本驗證機制。

實體報頭 ?
? 請求和響應消息都可以傳送一個實體。一個實體由實體報頭域和實體正文組成,大多數情況下,實體正文就是請求消息中的請求正文或者響應消息中的響應正文。但是在發送時,并不是說實體報頭域和實體正文要在一起發送,例如:有些響應可以只包含實體報頭域。實體就好象我們寫的書信,在信中,我們可以寫上標題,加上頁號等,這部分就相當于是實體報頭域,而我們所寫的書信的內容,就相當于實體正文。前面說講的普通報頭、請求報頭、響應報頭我們可以看成是寫在信封上的郵編、接收者,發送者等內容。 ?
? 實體報頭定義了關于實體正文(例如:有無實體正文)和請求所標識的資源的元信息。 ?
? 所謂元信息,是指描述其他信息的信息。 ?
? ?
? 常用的實體報頭域: ?
? Content-Encoding ?
? ? ? ? ? Content-Encoding實體報頭域被使用作媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容編碼,因而要獲得Content-Type報頭域中所引用的媒體類型,必須采用相應的解碼機制。Content-Encoding主要用語記錄文檔的壓縮方法,下面是它的一個例子:Content-Encoding: ? gzip。如果一個實體正文采用了編碼方式存儲,在使用之前就必須進行解碼。 ?
? Content-Language ?
? ? ? ? ? Content-Language實體報頭域描述了資源所用的自然語言。Content-Language允許用戶遵照自身的首選語言來識別和區分實體。如果這個實體內容僅僅打算提供給丹麥的閱讀者,那么可以按照如下的方式設置這個實體報頭域:Content-Language: ? da。 ?
? 如果沒有指定Content-Language報頭域,那么實體內容將提供給所以語言的閱讀者。 ?
? Content-Length ?
? ? ? ? ? Content-Length實體報頭域用于指明正文的長度,以字節方式存儲的十進制數字來表示,也就是一個數字字符占一個字節,用其對應的ASCII碼存儲傳輸。 ?
? ? ? ? ? 要注意的是:這個長度僅僅是表示實體正文的長度,沒有包括實體報頭的長度。 ?
? Content-Type ?
? ? ? ? ? Content-Type實體報頭域用語指明發送給接收者的實體正文的媒體類型。例如: ?
? Content-Type: ? text/html;charset=ISO-8859-1 ?
? Content-Type: ? text/html;charset=GB2312 ?
? Last-Modified ?
? ? ? ? ? Last-Modified實體報頭域用于指示資源最后的修改日期及時間。 ?
? Expires ?
? ? ? ? ? Expires實體報頭域給出響應過期的日期和時間。通常,代理服務器或瀏覽器會緩存一些頁面。當用戶再次訪問這些頁面時,直接從緩存中加載并顯示給用戶,這樣縮短了響應的時間,減少服務器的負載。為了讓代理服務器或瀏覽器在一段時間后更新頁面,我們可以使用Expires實體報頭域指定頁面過期的時間。當用戶又一次訪問頁面時,如果Expires報頭域給出的日期和時間比Date普通報頭域給出的日期和時間要早(或相同),那么代理服務器或瀏覽器就不會再使用緩存的頁面而是從服務器上請求更新的頁面。不過要注意,即使頁面過期了,也并不意味著服務器上的原始資源在此時間之前或之后發生了改變。 ?
? ? ? ? ? Expires實體報頭域使用的日期和時間必須是RFC ? 1123中的日期格式,例如: ?
? Expires: ? Thu, ? 15 ? Sep ? 2005 ? 16:00:00 ? GMT ?
? ? ? ? ? HTTP1.1的客戶端和緩存必須將其他非法的日期格式(也包括0)看作已過期。例如,為了讓瀏覽器不要緩存頁面,我們也可以利用Expires實體報頭域,設置它的值為0,如下(JSP):response.setDateHeader("Expires",0);

?

除掉注釋的部分就是一個完整的包,向/user/tmpUpload.php上傳了一個文件。 ?
? =========http頭========== ?
? POST ? /user/tmpUpload.php ? HTTP/1.1 ?
? Content-Type: ? multipart/form-data; ? boundary=---------------------------7d53b9297030e ?
? Content-Length: ? 1017 ?
? ?
? -----------------------------7d53b9297030e ?
? Content-Disposition: ? form-data; ? name="upload"; ? filename="C:\Documents.and.Settings\hwy\桌面\attachment" ?
? Content-Type: ? p ?
? ?
? 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ?
? -----------------------------7d53b9297030e-- ?
? ? ?
? ? ===========結束============???

轉載于:https://www.cnblogs.com/cumtb3S/archive/2010/05/30/1747497.html

總結

以上是生活随笔為你收集整理的转:vc中如何通过http的post方式上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。