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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

http上传文件 pda java_通过HTTP协议上传文件

發布時間:2023/12/20 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 http上传文件 pda java_通过HTTP协议上传文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HTTP是很常見的協議,雖然用得很多,但對細節的了解卻是很淺,這回通過向服務端上傳文件信息來理解細節。網絡庫的選擇:1、WinHTTP是windows下常用的庫;2、CURL是廣受喜愛的開源庫。對于我來說,libcurl最大的優點是使用方便,可以把注意力更多的集中到業務層上,提高工作效率,避免重造輪子;缺點是略大(MD編譯有264KB,MT編譯有340KB),不像WinHTTP可以由windows操作系統集成。下邊展示如何使用這兩種網絡庫實現表單POST文件。

一、libcurl

庫編譯:把include、lib的代碼拿出來,使用靜態庫,設置預定義宏BUILDING_LIBCURL。

測試工程:設置預定義宏CURL_STATICLIB;添加依賴lib:Ws2_32.lib Wldap32.lib。

主要代碼:

voidcurl_post_cswuyg()

{

curl_global_init(CURL_GLOBAL_ALL);

CURL* hCurl =curl_easy_init();if(hCurl !=NULL)

{//也許有Expect: 100-continue,去掉它

curl_slist* pOptionList =NULL;

pOptionList= curl_slist_append(pOptionList, "Expect:");

curl_easy_setopt(hCurl, CURLOPT_HTTPHEADER, pOptionList);

curl_httppost* pFormPost =NULL;

curl_httppost* pLastElem =NULL;//上傳文件,指定本地文件完整路徑

curl_formadd(&pFormPost, &pLastElem, CURLFORM_COPYNAME, "ufile01", CURLFORM_FILE, "C:\\temp\\upload_test_curl_cswuyg.txt", CURLFORM_CONTENTTYPE, "application/octet-stream", CURLFORM_END);//上傳自定義文件內容的文件,CURLFORM_BUFFER指定服務端文件名//http://curl.haxx.se/libcurl/c/curl_formadd.html

char* file_info = "file_info——cswuyg";int record_length = std::string(file_info).length();

curl_formadd(&pFormPost, &pLastElem,

CURLFORM_COPYNAME,"ufile01",

CURLFORM_BUFFER,"cswuyg_test.txt",

CURLFORM_BUFFERPTR, file_info,

CURLFORM_BUFFERLENGTH, record_length,

CURLFORM_END);//不加一個結束的hfs服務端無法寫入文件,一般不存在這種問題,這里加入只是為了測試.//curl_formadd(&pFormPost, &pLastElem, CURLFORM_COPYNAME, "end", CURLFORM_COPYCONTENTS, "end", CURLFORM_END);

curl_easy_setopt(hCurl, CURLOPT_HTTPPOST, pFormPost);

curl_easy_setopt(hCurl, CURLOPT_URL,"http://127.0.0.1/hfs_up/");

CURLcode res=curl_easy_perform(hCurl);if(res !=CURLE_OK)

{

std::wcout<< "Error" <<:endl>

}

curl_formfree(pFormPost);

curl_easy_cleanup(hCurl);

}

curl_global_cleanup();

}

wireshark抓包,127.0.0.1地址無法抓到,網絡上有解決方案。示意圖:

頭域設置分割符:

MIME部分:

二、WinHTTP

庫:winhttp.lib

主要代碼:

voidcswuyg_winhttp_post()

{

HINTERNET hSession= ::WinHttpOpen(L"cswuyg post test/1.0", WINHTTP_ACCESS_TYPE_NO_PROXY, NULL, NULL, NULL);

HINTERNET hConnect= ::WinHttpConnect(hSession, L"127.0.0.1", INTERNET_DEFAULT_HTTP_PORT, 0);if (hConnect ==NULL)

{int i =ERROR_WINHTTP_INCORRECT_HANDLE_TYPE;return;

}const wchar_t* lpszAcceptedType[] = {L"*/*", NULL};

HINTERNET hRequest= ::WinHttpOpenRequest(hConnect, L"POST", L"hfs_up", L"HTTP/1.1", WINHTTP_NO_REFERER, lpszAcceptedType, 0);if (hRequest ==NULL)

{return;

}

DWORD dwTime= 5000;

::WinHttpSetOption(hRequest, WINHTTP_OPTION_CONNECT_TIMEOUT,&dwTime, sizeof(DWORD));

std::wstring strHeader= L"Content-Type: multipart/form-data; boundary=--boundary_cswuygtest\r\n";

::WinHttpAddRequestHeaders(hRequest, strHeader.c_str(), strHeader.length(), WINHTTP_ADDREQ_FLAG_ADD|WINHTTP_ADDREQ_FLAG_REPLACE);

std::string strMIME = "----boundary_cswuygtest\r\n";

strMIME+= "Content-Disposition: form-data; name=\"ufile01\"; filename=\"upload_test_http_cswuyg.txt\"\r\n";

strMIME+= "Content-Type:application/octet-stream\r\n\r\n";

strMIME+= "1\r\n";/

//除了這個表單之外,后頭還必須要有另外的表單信息,否則hfs服務端那邊無法寫入文件,這里僅為測試。//strMIME += "----boundary_cswuygtest\r\n" ;//strMIME += "Content-Disposition: form-data; name=\"name\"\r\n\r\n";//strMIME += "temp.txt\r\n";

/

strMIME += "----boundary_cswuygtest--\r\n";/

//可以直接寫入//::WinHttpSendRequest(hRequest, strHeader.c_str(), strHeader.length(), (LPVOID)strMIME.c_str(), strMIME.length(), strMIME.length(), 0);//也可以后面分步寫入

::WinHttpSendRequest(hRequest, NULL, 0, NULL, 0, strMIME.length(), 0);

DWORD dwWritten= 0;while(!strMIME.empty())

{

::WinHttpWriteData(hRequest, strMIME.c_str(), strMIME.length(),&dwWritten);if (strMIME.length() >dwWritten)

{

strMIME.substr(dwWritten);

}else{

strMIME= "";

}

}

::WinHttpReceiveResponse(hRequest, NULL);char buf[1024] = { 0};

DWORD dwToRead= 1024;

DWORD dwHaveRead= 0;

::WinHttpReadData(hRequest, buf, dwToRead,&dwHaveRead);

std::cout<< buf <<:endl>

::WinHttpCloseHandle(hRequest);

::WinHttpCloseHandle(hConnect);

::WinHttpCloseHandle(hSession);

}

wireshark抓包:

頭域設置:

表單設置:

三、總結

這兩個例子用hfs做服務器測試可以發現在上傳文件夾中上傳了文件,代碼都很簡單。測試過程中的最重要的是能盡快的反饋結果,所以能自己搭建一個http服務器很重要,hfs工具,非常簡單便捷。

POST表單最重要的是了解表單的格式。首先要在頭域增加Content-Type說明,如:“content-type:multipart/from-data; boundary=--cswuyg”。然后http body填充的數據要以MIME格式上傳,每部分數據的開頭都是由“--”+boundary開始的,結尾以"--"+boundary+"--"結束。

如果要上傳文件,需要跟服務器約定好格式,譬如上邊例子約定在content-Disposition中有filename鍵的則是上傳文件信息,該片的content為文件數據,這應該是比較通用的約定。

附上部分資料:

MIME:http://baike.baidu.com/view/160611.htm

MIME來源 : Multipurpose Internet Mail Extensions 多用途互聯網郵件擴展。服務器會將它們發送的多媒體數據的類型告訴瀏覽器,而通知手段就是說明該多媒體數據的MIME類型。

GZIP文件:application/x-gzip

任意的二進制數據:application/octet-stream.

普通文本:text/plain

wireshark:

MIME Multipart Media Encapsulation 代表使用表單上傳的所有數據

Encapsulated multipart part 代表表單中不同項的數據

Boundary 用來隔開表單中不同部分的數據

每部分數據的開頭都是由“--”+boundary開始的。

如果使用wireshark抓包,而http使用的不是默認的80端口,那么需要抓TCP包,然后再強制Decode為http。

HTTP協議的文檔:

chroimumde breakpad_sender代碼中也有post表單上傳文件部分,只不過它是用WinInet寫的。

2015 補充上傳文件時的抓包信息:

總結

以上是生活随笔為你收集整理的http上传文件 pda java_通过HTTP协议上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久久久久成人 | 五月婷婷在线视频 | 国产伦精品一区二区三区在线 | av三级在线播放 | 成人高清在线观看 | www.久久婷婷 | 都市激情校园春色亚洲 | 日韩伦理av | 一级黄色免费观看 | 亚洲经典视频在线观看 | 久久久噜噜噜久久中文字幕色伊伊 | 中文在线不卡 | fee性满足he牲bbw | 国产精彩视频在线 | 在线免费成人网 | 精品视频91 | 在线看国产 | 各种含道具高h调教1v1男男 | 裸体一区二区三区 | 伊人网综合视频 | 亚洲精品一区二区三区中文字幕 | 九九九九精品 | 青青青青青青青青草 | 国产吞精囗交久久久 | 久久91精品国产91久久小草 | 欧美福利视频 | 国产网站视频 | 九色综合网 | 在线香蕉 | 一卡二卡三卡四卡在线 | 风间由美一区二区 | 性综艺节目av在线播放 | 美女午夜激情 | 中国美女黄色一级片 | 免费看片色 | 天堂网2018 | 精品+无码+在线观看 | 69re视频 | 在线视频欧美亚洲 | 亚洲视频中文字幕在线观看 | 日本啪啪啪一区二区 | 综合网久久 | 亚洲国产网站 | 青青色在线视频 | 国内自拍第一页 | 日韩一区二区高清视频 | 93久久精品日日躁夜夜躁欧美 | 亚洲AV蜜桃永久无码精品性色 | 在线免费观看成年人视频 | 国产一区中文字幕 | 亚洲AV无码一区二区三区蜜桃 | wwwxx日本 | 日韩欧美中文字幕精品 | 日本一区免费看 | 免费av网站在线看 | 色宗合 | 国产小视频在线观看 | 亚洲专区欧美专区 | 国产大片aaa | 成年人三级视频 | 国产精品一区久久久 | 无码aⅴ精品一区二区三区 精品久久在线 | 黄色小视频免费网站 | 欧美国产成人精品一区二区三区 | 午夜精品久久久久久 | 香蕉久久精品日日躁夜夜躁 | 三大队在线观看 | 午夜精品福利影院 | 亚洲国产极品 | 午夜国产片 | 熟女人妻一区二区三区免费看 | 精品无码久久久久久久久久 | 91视频国产精品 | 欧美成人综合在线 | 成人xxx| 思思99热 | 九九国产精品视频 | 色天使亚洲 | 超碰免费看 | 亚洲三级中文字幕 | 超碰国产91 | 综合网伊人 | 欧美老女人视频 | 夜夜操夜夜爱 | 天天做天天操 | 欧美aa大片 | 极品福利视频 | 毛片在线免费观看网址 | 日韩黄大片 | 日韩精品一区在线视频 | 欧美高清视频在线观看 | 久久久久久久久久99 | 日韩av毛片 | 国产乱码精品一区二区三区亚洲人 | 丁香花完整视频在线观看 | 日本一二三区在线视频 | 日韩午夜小视频 | 顶级毛茸茸aaahd极品 | 欧美一区二区不卡视频 |