本實驗為了減少**量,使用了封裝比較完善的http庫,本文主要講述http檔案上傳的主要要求。
為了分析http header,我們通過chrome得到上傳檔案時的http資訊:
通過上面的截圖我們可以發現,關鍵頭部資訊為content-type和content-length。一般我們寫html上傳時,都會在form標籤加乙個multipart-data屬性表示該表單有檔案上傳輸入域,so我們在使用c實現http上傳的時候,就需要在頭部content-type項加入multipart-data值,有人會問,誒,那後面的boundary是什麼?
boundary表示的是每個表單輸入域的分界!例:----zngpdtepmx0krhh_g0x99yef9r8jzsrjsxc
好了,content-type有了,接下來我們需要的就是content-length項的資訊了。content-length表示的是請求內容的長度(byte),那這個長度到底是多大?請看下圖:
從圖中我們不難看出,content-length=上傳檔案大小+輸入域頭部資訊+輸入域尾部(byte)。
貼上計算長度的**乙份作為參考:
int get_data_length(int filesize, char* boundary, char* name, char* filename)
其實在前面的內容基本已經把整篇文章需要講的講清楚了,但是我覺得還是貼上具體實現的**吧!
計算長度:
int get_data_length(int filesize, char* boundary, char* name, char* filename)
經過計算得出這次上傳內容的長度,新增到請求頭,那麼請求頭的基本需要的關鍵資訊也已經完成了,之後我們傳送該請求。
httpaddrequestheaders( "content-type","multipart/form-data; boundary=----zngpdtepmx0krhh_g0x99yef9r8jzsrjsxc");//新增content-type
httpaddrequestheaders("content-length",get_data_length(filesize, boundary, name, filename));//新增content-length
httpsendrequest(uri);//傳送請求
當我們傳送請求成功,就證明客戶端已經與伺服器建立了tcp連線了,接下來我們繼續傳送http內容給伺服器就行了。
構建上傳內容:
好了,乙個檔案的http上傳就是這麼簡單,你現在想試試?
C語言實現棧 基於陣列
棧是一種操作受限的資料結構,只允許從一段操作,而且先進後出 filo first in last out 這裡將棧的操作封裝在c語言的標頭檔案裡 實現棧的 如下 include define maxsize 10 typedef int datatype sequence stack 實現順序棧,使...
基於C語言實現快速排序
快速排序的基本思想是 1 先從陣列中取出乙個數作為基準數。2 將小於或等於它的數全放到它的左邊,大於它的數全放到它的右邊。3 再對左右區間重複第 2 步,直到各區間只有乙個數。更易於理解的排序邏輯是 挖坑 遞迴 請移步此微軟大佬的文章 白話經典演算法系列之六 快速排序 快速搞定 時間複雜度 o n2...
基於c語言實現螺旋矩陣
首先我們要清楚螺旋矩陣的內涵,即所謂 螺旋方陣 是指對任意給定的n,將1到n n的數字從左上角第1個格仔開始,按順時針螺旋方向順序填入n n的方陣裡。最基本的就是定義乙個二維陣列,對其進行向右 向下 向左 向上的依次迴圈。1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 1...