libcurl上傳圖片
快速產生libcurl程式碼
首先先用curl指令發送request,確認可以發送成功後可以用指令自動產生程式碼,在這裡我們將上傳一張圖片到http server,利用curl讀取電腦的圖片並且上傳
1 | curl -X POST "http://localhost:8000/upload" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "uploadedFile=@a.jpg;type=image/jpeg" -F "EventTime=2022-01-01" |
利用curl的--libcurl
選項就可以快速產生c語言的程式碼,程式碼會被儲存到code.c
1 | curl -X POST "http://localhost:8000/upload" -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "uploadedFile=@a.jpg;type=image/jpeg" -F "EventTime=2022-01-01" --libcurl code.c |
產生的程式碼如下
1 | /********* Sample code generated by the curl command line tool ********** |
將curl_mime_filedata
改成curl_mime_data
由於我的目的是將在記憶體中已經被encode好的圖片直接上傳,所以要用curl_mime_data
直接上傳記憶體內的內容。
注意除了用curl_mime_data
放入資料以外,還必須自己手動把Content-Disposition補上filename。
另外記得curl_mime_data
不可以用CURL_ZERO_TERMINATED
而是要實際算出圖片的資料長度。
可以參考官方的範例
1 | curl_mime *mime; |
讀binary file
直接將圖片讀進記憶體內不要做任何處理
範例
1 | void ReadFile(char *name) |
termshark
再除錯的過程中,最好可以直接看一看自己的封包長什麼樣子,對於沒有螢幕的Ubuntu Server,可以安裝termshark,它可以做到跟wireshark差不多的事情
完整範例
1 | /********* Sample code generated by the curl command line tool ********** |
參考:
https://daniel.haxx.se/blog/2022/09/12/convert-a-curl-cmdline-to-libcurl-source-code/