{"id":4068,"date":"2020-01-14T18:04:30","date_gmt":"2020-01-14T10:04:30","guid":{"rendered":"https:\/\/damogame.cn\/wordpress\/?p=4068"},"modified":"2020-01-14T18:04:30","modified_gmt":"2020-01-14T10:04:30","slug":"c-%e7%94%a8libcurl%e5%ba%93%e8%bf%9b%e8%a1%8chttp%e9%80%9a%e8%ae%af%e7%bd%91%e7%bb%9c%e7%bc%96%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/4068","title":{"rendered":"C++ \u7528libcurl\u5e93\u8fdb\u884chttp\u901a\u8baf\u7f51\u7edc\u7f16\u7a0b"},"content":{"rendered":"<p class=\"postTitle\"><a href=\"https:\/\/www.cnblogs.com\/moodlxs\/archive\/2012\/10\/15\/2724318.html\">\u539f\u6587\u5730\u5740<\/a><\/p>\n<div class=\"clear\"><\/div>\n<div class=\"postBody\">\n<div id=\"cnblogs_post_body\" class=\"blogpost-body \">\n<div class=\"news_nr_tit\"><strong>\u76ee\u5f55\u7d22\u5f15\uff1a<\/strong><\/div>\n<div class=\"news_nr_tit\">\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>\u4e00\u3001LibCurl\u57fa\u672c\u7f16\u7a0b\u6846\u67b6\r\n\u4e8c\u3001\u4e00\u4e9b\u57fa\u672c\u7684\u51fd\u6570\r\n\u4e09\u3001curl_easy_setopt\u51fd\u6570\u90e8\u5206\u9009\u9879\u4ecb\u7ecd\r\n\u56db\u3001curl_easy_perform \u51fd\u6570\u8bf4\u660e\uff08error \u72b6\u6001\u7801\uff09\r\n\u4e94\u3001libcurl\u4f7f\u7528\u7684HTTP\u6d88\u606f\u5934\r\n\u516d\u3001\u83b7\u53d6http\u5e94\u7b54\u5934\u4fe1\u606f\r\n\u4e03\u3001\u591a\u7ebf\u7a0b\u95ee\u9898\r\n\u516b\u3001\u4ec0\u4e48\u65f6\u5019libcurl\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c\r\n\u4e5d\u3001\u5173\u4e8e\u5bc6\u7801\r\n\u5341\u3001HTTP\u9a8c\u8bc1\r\n\u5341\u4e00\u3001\u4ee3\u7801\u793a\u4f8b\r\n     1.\u57fa\u672c\u7684http GET\/POST\u64cd\u4f5c\r\n     2 \u83b7\u53d6html\u7f51\u9875\r\n     3 \u7f51\u9875\u4e0b\u8f7d\u4fdd\u5b58\u5b9e\u4f8b\r\n     4 \u8fdb\u5ea6\u6761\u5b9e\u4f8b\u663e\u793a\u6587\u4ef6\u4e0b\u8f7d\u8fdb\u5ea6\r\n     5 \u65ad\u70b9\u7eed\u4f20\u5b9e\u4f8b<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"news_nr\">\n<div class=\"article_content\">\n<div><strong>\u00a0<\/strong><\/div>\n<div id=\"MyContent\"><strong>\u4e00\u3001LibCurl\u57fa\u672c\u7f16\u7a0b\u6846\u67b6<\/strong><br \/>\n<a href=\"http:\/\/curl.haxx.se\/\" target=\"_blank\" rel=\"noopener noreferrer\">libcurl<\/a>\u662f\u4e00\u4e2a\u8de8\u5e73\u53f0\u7684\u7f51\u7edc\u534f\u8bae\u5e93\uff0c\u652f\u6301http, https, ftp, gopher, telnet, dict, file, \u548cldap \u534f\u8bae\u3002libcurl\u540c\u6837\u652f\u6301HTTPS\u8bc1\u4e66\u6388\u6743\uff0cHTTP POST, HTTP PUT, FTP \u4e0a\u4f20, HTTP\u57fa\u672c\u8868\u5355\u4e0a\u4f20\uff0c\u4ee3\u7406\uff0ccookies,\u548c\u7528\u6237\u8ba4\u8bc1\u3002\u60f3\u8981\u77e5\u9053\u66f4\u591a\u5173\u4e8elibcurl\u7684\u4ecb\u7ecd\uff0c\u53ef\u4ee5\u5230\u5b98\u7f51\u00a0<a href=\"http:\/\/curl.haxx.se\/\">http:\/\/curl.haxx.se\/<\/a>\u4e0a\u53bb\u4e86\u89e3\uff0c\u5728\u8fd9\u91cc\u4e0d\u518d\u8be6\u8ff0\u3002<\/div>\n<div><strong>win32\u7248\u7684libcurl\u4e0b\u8f7d\u5730\u5740:<\/strong><a href=\"http:\/\/curl.freeby.pctools.cl\/download\/libcurl-7.18.0-win32-msvc.zip\">http:\/\/curl.freeby.pctools.cl\/download\/libcurl-7.18.0-win32-msvc.zip<\/a><\/div>\n<div>\u5728\u57fa\u4e8eLibCurl\u7684\u7a0b\u5e8f\u91cc\uff0c\u4e3b\u8981\u91c7\u7528callback function \uff08\u56de\u8c03\u51fd\u6570\uff09\u7684\u5f62\u5f0f\u5b8c\u6210\u4f20\u8f93\u4efb\u52a1\uff0c\u7528\u6237\u5728\u542f\u52a8\u4f20\u8f93\u524d\u8bbe\u7f6e\u597d\u5404\u7c7b\u53c2\u6570\u548c\u56de\u8c03\u51fd\u6570\uff0c\u5f53\u6ee1\u8db3\u6761\u4ef6\u65f6libcurl\u5c06\u8c03\u7528\u7528\u6237\u7684\u56de\u8c03\u51fd\u6570\u5b9e\u73b0\u7279\u5b9a\u529f\u80fd\u3002\u4e0b\u9762\u662f\u5229\u7528libcurl\u5b8c\u6210\u4f20\u8f93\u4efb\u52a1\u7684\u6d41\u7a0b\uff1a<\/div>\n<div>1.\u00a0 \u00a0\u00a0 \u00a0 \u8c03\u7528<strong>curl_global_init()<\/strong>\u521d\u59cb\u5316libcurl<br \/>\n2.\u00a0 \u00a0\u00a0 \u00a0 \u8c03\u7528<strong>curl_easy_init()<\/strong>\u51fd\u6570\u5f97\u5230 easy interface\u578b\u6307\u9488<br \/>\n3.\u00a0 \u00a0\u00a0 \u00a0 \u8c03\u7528<strong>curl_easy_setopt()<\/strong>\u8bbe\u7f6e\u4f20\u8f93\u9009\u9879<br \/>\n4.\u00a0 \u00a0\u00a0 \u00a0 \u6839\u636e<strong>curl_easy_setopt()<\/strong>\u8bbe\u7f6e\u7684\u4f20\u8f93\u9009\u9879\uff0c\u5b9e\u73b0\u56de\u8c03\u51fd\u6570\u4ee5\u5b8c\u6210\u7528\u6237\u7279\u5b9a\u4efb\u52a1<br \/>\n5.\u00a0 \u00a0\u00a0 \u00a0 \u8c03\u7528<strong>curl_easy_perform()<\/strong>\u51fd\u6570\u5b8c\u6210\u4f20\u8f93\u4efb\u52a1<br \/>\n6.\u00a0 \u00a0\u00a0 \u00a0 \u8c03\u7528<strong>curl_easy_cleanup()<\/strong>\u91ca\u653e\u5185\u5b58<br \/>\n\u5728\u6574\u8fc7\u8fc7\u7a0b\u4e2d\u8bbe\u7f6e<strong>curl_easy_setopt(<\/strong>)\u53c2\u6570\u662f\u6700\u5173\u952e\u7684\uff0c\u51e0\u4e4e\u6240\u6709\u7684libcurl\u7a0b\u5e8f\u90fd\u8981\u4f7f\u7528\u5b83\u3002<\/div>\n<div>\n<strong>\u4e8c\u3001\u4e00\u4e9b\u57fa\u672c\u7684\u51fd\u6570<\/strong><br \/>\n<strong>1.CURLcode curl_global_init(long flags);<\/strong><br \/>\n\u63cf\u8ff0\uff1a<br \/>\n\u8fd9\u4e2a\u51fd\u6570\u53ea\u80fd\u7528\u4e00\u6b21\u3002(\u5176\u5b9e\u5728\u8c03\u7528curl_global_cleanup \u51fd\u6570\u540e\u4ecd\u7136\u53ef\u518d\u7528)<br \/>\n\u5982\u679c\u8fd9\u4e2a\u51fd\u6570\u5728curl_easy_init\u51fd\u6570\u8c03\u7528\u65f6\u8fd8\u6ca1\u8c03\u7528\uff0c\u5b83\u8bb2\u7531libcurl\u5e93\u81ea\u52a8\u8c03\u7528\uff0c<strong>\u6240\u4ee5\u591a\u7ebf\u7a0b\u4e0b\u6700\u597d\u4e3b\u52a8\u8c03\u7528\u8be5\u51fd\u6570\u4ee5\u9632\u6b62\u5728\u7ebf\u7a0b\u4e2dcurl_easy_init\u65f6\u591a\u6b21\u8c03\u7528\u3002<\/strong><\/div>\n<div><strong>\u6ce8\u610f\uff1a\u867d\u7136libcurl\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u4f46curl_global_init\u662f\u4e0d\u80fd\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u6240\u4ee5\u4e0d\u8981\u5728\u6bcf\u4e2a\u7ebf\u7a0b\u4e2d\u90fd\u8c03\u7528curl_global_init\uff0c\u5e94\u8be5\u5c06\u8be5\u51fd\u6570\u7684\u8c03\u7528\u653e\u5728\u4e3b\u7ebf\u7a0b\u4e2d\u3002<\/strong><br \/>\n\u53c2\u6570\uff1aflags<br \/>\nCURL_GLOBAL_ALL\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0 \/\/\u521d\u59cb\u5316\u6240\u6709\u7684\u53ef\u80fd\u7684\u8c03\u7528\u3002<br \/>\nCURL_GLOBAL_SSL\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0 \/\/\u521d\u59cb\u5316\u652f\u6301 \u5b89\u5168\u5957\u63a5\u5b57\u5c42\u3002<br \/>\nCURL_GLOBAL_WIN32\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0 \u00a0\/\/\u521d\u59cb\u5316win32\u5957\u63a5\u5b57\u5e93\u3002<br \/>\nCURL_GLOBAL_NOTHING\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0\/\/\u6ca1\u6709\u989d\u5916\u7684\u521d\u59cb\u5316\u3002<\/div>\n<div>\n<strong>2 void curl_global_cleanup(void);<\/strong><br \/>\n\u63cf\u8ff0\uff1a\u5728\u7ed3\u675flibcurl\u4f7f\u7528\u7684\u65f6\u5019\uff0c\u7528\u6765\u5bf9curl_global_init\u505a\u7684\u5de5\u4f5c\u6e05\u7406\u3002\u7c7b\u4f3c\u4e8eclose\u7684\u51fd\u6570\u3002<\/div>\n<div><strong>\u6ce8\u610f\uff1a\u867d\u7136libcurl\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u4f46curl_global_cleanup\u662f\u4e0d\u80fd\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u6240\u4ee5\u4e0d\u8981\u5728\u6bcf\u4e2a\u7ebf\u7a0b\u4e2d\u90fd\u8c03\u7528curl_global_init\uff0c\u5e94\u8be5\u5c06\u8be5\u51fd\u6570\u7684\u8c03\u7528\u653e\u5728\u4e3b\u7ebf\u7a0b\u4e2d\u3002<\/strong><\/div>\n<div>\n<strong>3 char *curl_version( );<\/strong><br \/>\n\u63cf\u8ff0: \u6253\u5370\u5f53\u524dlibcurl\u5e93\u7684\u7248\u672c\u3002<\/div>\n<div>\n<strong>4 CURL *curl_easy_init( );<\/strong><br \/>\n\u63cf\u8ff0:<br \/>\ncurl_easy_init\u7528\u6765\u521d\u59cb\u5316\u4e00\u4e2aCURL\u7684\u6307\u9488(\u6709\u4e9b\u50cf\u8fd4\u56deFILE\u7c7b\u578b\u7684\u6307\u9488\u4e00\u6837). \u76f8\u5e94\u7684\u5728\u8c03\u7528\u7ed3\u675f\u65f6\u8981\u7528curl_easy_cleanup\u51fd\u6570\u6e05\u7406.<br \/>\n\u4e00\u822ccurl_easy_init\u610f\u5473\u7740\u4e00\u4e2a\u4f1a\u8bdd\u7684\u5f00\u59cb. \u5b83\u4f1a\u8fd4\u56de\u4e00\u4e2aeasy_handle(CURL*\u5bf9\u8c61), \u4e00\u822c\u90fd\u7528\u5728easy\u7cfb\u5217\u7684\u51fd\u6570\u4e2d.<\/div>\n<div>\n<strong>5 void curl_easy_cleanup(CURL *handle);<\/strong><br \/>\n\u63cf\u8ff0:<br \/>\n\u8fd9\u4e2a\u8c03\u7528\u7528\u6765\u7ed3\u675f\u4e00\u4e2a\u4f1a\u8bdd.\u4e0ecurl_easy_init\u914d\u5408\u7740\u7528.<br \/>\n\u53c2\u6570:<br \/>\nCURL\u7c7b\u578b\u7684\u6307\u9488.<\/div>\n<div>\n<strong>6 CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);<\/strong><br \/>\n\u63cf\u8ff0: \u8fd9\u4e2a\u51fd\u6570\u6700\u91cd\u8981\u4e86.\u51e0\u4e4e\u6240\u6709\u7684curl \u7a0b\u5e8f\u90fd\u8981\u9891\u7e41\u7684\u4f7f\u7528\u5b83.\u5b83\u544a\u8bc9curl\u5e93.\u7a0b\u5e8f\u5c06\u6709\u5982\u4f55\u7684\u884c\u4e3a. \u6bd4\u5982\u8981\u67e5\u770b\u4e00\u4e2a\u7f51\u9875\u7684html\u4ee3\u7801\u7b49.(\u8fd9\u4e2a\u51fd\u6570\u6709\u4e9b\u50cfioctl\u51fd\u6570)\u53c2\u6570:<br \/>\n1 CURL\u7c7b\u578b\u7684\u6307\u9488<br \/>\n2 \u5404\u79cdCURLoption\u7c7b\u578b\u7684\u9009\u9879.(\u90fd\u5728curl.h\u5e93\u91cc\u6709\u5b9a\u4e49,man \u4e5f\u53ef\u4ee5\u67e5\u770b\u5230)<br \/>\n3 parameter \u8fd9\u4e2a\u53c2\u6570 \u65e2\u53ef\u4ee5\u662f\u4e2a\u51fd\u6570\u7684\u6307\u9488,\u4e5f\u53ef\u4ee5\u662f\u67d0\u4e2a\u5bf9\u8c61\u7684\u6307\u9488,\u4e5f\u53ef\u4ee5\u662f\u4e2along\u578b\u7684\u53d8\u91cf.\u5b83\u7528\u4ec0\u4e48\u8fd9\u53d6\u51b3\u4e8e\u7b2c\u4e8c\u4e2a\u53c2\u6570.<br \/>\nCURLoption \u8fd9\u4e2a\u53c2\u6570\u7684\u53d6\u503c\u5f88\u591a.\u5177\u4f53\u7684\u53ef\u4ee5\u67e5\u770bman\u624b\u518c.<\/div>\n<div>\n<strong>7 CURLcode curl_easy_perform(CURL *handle);<\/strong><\/div>\n<div>\u63cf\u8ff0:\u8fd9\u4e2a\u51fd\u6570\u5728\u521d\u59cb\u5316CURL\u7c7b\u578b\u7684\u6307\u9488 \u4ee5\u53cacurl_easy_setopt\u5b8c\u6210\u540e\u8c03\u7528. \u5c31\u50cf\u5b57\u9762\u7684\u610f\u601d\u6240\u8bf4perform\u5c31\u50cf\u662f\u4e2a\u821e\u53f0.\u8ba9\u6211\u4eec\u8bbe\u7f6e\u7684<br \/>\noption \u8fd0\u4f5c\u8d77\u6765.\u53c2\u6570:<br \/>\nCURL\u7c7b\u578b\u7684\u6307\u9488.<\/div>\n<div>\n<strong>\u4e09\u3001\u00a0curl_easy_setopt\u51fd\u6570\u90e8\u5206\u9009\u9879\u4ecb\u7ecd<\/strong><br \/>\n\u672c\u8282\u4e3b\u8981\u4ecb\u7ecdcurl_easy_setopt\u4e2d\u8ddfhttp\u76f8\u5173\u7684\u53c2\u6570\u3002\u8be5\u51fd\u6570\u662fcurl\u4e2d\u975e\u5e38\u91cd\u8981\u7684\u51fd\u6570\uff0ccurl\u6240\u6709\u8bbe\u7f6e\u90fd\u662f\u5728\u8be5\u51fd\u6570\u4e2d\u5b8c\u6210\u7684\uff0c\u8be5\u51fd\u6570\u7684\u8bbe\u7f6e\u9009\u9879\u4f17\u591a\uff0c\u6ce8\u610f\u672c\u8282\u7684\u9610\u8ff0\u7684\u53ea\u662f\u90e8\u5206\u5e38\u89c1\u9009\u9879\u3002<\/div>\n<div>1.\u00a0 \u00a0\u00a0\u00a0CURLOPT_URL<br \/>\n\u8bbe\u7f6e\u8bbf\u95eeURL<\/div>\n<div>\n2.\u00a0 \u00a0\u00a0 \u00a0\u00a0CURLOPT_WRITEFUNCTION\uff0cCURLOPT_WRITEDATA<br \/>\n\u56de\u8c03\u51fd\u6570\u539f\u578b\u4e3a\uff1a<strong>size_t function( void *ptr, size_t size, size_t nmemb, void *stream);\u00a0<\/strong>\u51fd\u6570\u5c06\u5728libcurl\u63a5\u6536\u5230\u6570\u636e\u540e\u88ab\u8c03\u7528\uff0c\u56e0\u6b64\u51fd\u6570\u591a\u505a\u6570\u636e\u4fdd\u5b58\u7684\u529f\u80fd\uff0c\u5982\u5904\u7406\u4e0b\u8f7d\u6587\u4ef6\u3002CURLOPT_WRITEDATA \u7528\u4e8e\u8868\u660eCURLOPT_WRITEFUNCTION\u51fd\u6570\u4e2d\u7684stream\u6307\u9488\u7684\u6765\u6e90\u3002<\/div>\n<div>\u5982\u679c\u4f60\u6ca1\u6709\u901a\u8fc7CURLOPT_WRITEFUNCTION\u5c5e\u6027\u7ed9easy handle\u8bbe\u7f6e\u56de\u8c03\u51fd\u6570\uff0clibcurl\u4f1a\u63d0\u4f9b\u4e00\u4e2a\u9ed8\u8ba4\u7684\u56de\u8c03\u51fd\u6570\uff0c\u5b83\u53ea\u662f\u7b80\u5355\u7684\u5c06\u63a5\u6536\u5230\u7684\u6570\u636e\u6253\u5370\u5230\u6807\u51c6\u8f93\u51fa\u3002\u4f60\u4e5f\u53ef\u4ee5\u901a\u8fc7 CURLOPT_WRITEDATA\u5c5e\u6027\u7ed9\u9ed8\u8ba4\u56de\u8c03\u51fd\u6570\u4f20\u9012\u4e00\u4e2a\u5df2\u7ecf\u6253\u5f00\u7684\u6587\u4ef6\u6307\u9488\uff0c\u7528\u4e8e\u5c06\u6570\u636e\u8f93\u51fa\u5230\u6587\u4ef6\u91cc\u3002<\/div>\n<div>\n3.\u00a0 \u00a0\u00a0 \u00a0CURLOPT_HEADERFUNCTION\uff0cCURLOPT_HEADERDATA<br \/>\n\u56de\u8c03\u51fd\u6570\u539f\u578b\u4e3a size_t function( void *ptr, size_t size,size_t nmemb, void *stream); libcurl\u4e00\u65e6\u63a5\u6536\u5230http \u5934\u90e8\u6570\u636e\u540e\u5c06\u8c03\u7528\u8be5\u51fd\u6570\u3002CURLOPT_WRITEDATA \u4f20\u9012\u6307\u9488\u7ed9libcurl\uff0c\u8be5\u6307\u9488\u8868\u660eCURLOPT_HEADERFUNCTION \u51fd\u6570\u7684stream\u6307\u9488\u7684\u6765\u6e90\u3002<\/div>\n<div>\n4.\u00a0 \u00a0\u00a0 \u00a0\u00a0CURLOPT_READFUNCTION CURLOPT_READDATA<br \/>\nlibCurl\u9700\u8981\u8bfb\u53d6\u6570\u636e\u4f20\u9012\u7ed9\u8fdc\u7a0b\u4e3b\u673a\u65f6\u5c06\u8c03\u7528CURLOPT_READFUNCTION\u6307\u5b9a\u7684\u51fd\u6570\uff0c\u51fd\u6570\u539f\u578b\u662f\uff1asize_t function(void *ptr, size_t size, size_t nmemb,void *stream). CURLOPT_READDATA \u8868\u660eCURLOPT_READFUNCTION\u51fd\u6570\u539f\u578b\u4e2d\u7684stream\u6307\u9488\u6765\u6e90\u3002<\/div>\n<div>\n5.\u00a0 \u00a0\u00a0 \u00a0\u00a0CURLOPT_NOPROGRESS\uff0cCURLOPT_PROGRESSFUNCTION\uff0cCURLOPT_PROGRESSDATA<br \/>\n\u8ddf\u6570\u636e\u4f20\u8f93\u8fdb\u5ea6\u76f8\u5173\u7684\u53c2\u6570\u3002CURLOPT_PROGRESSFUNCTION \u6307\u5b9a\u7684\u51fd\u6570\u6b63\u5e38\u60c5\u51b5\u4e0b\u6bcf\u79d2\u88ablibcurl\u8c03\u7528\u4e00\u6b21\uff0c\u4e3a\u4e86\u4f7fCURLOPT_PROGRESSFUNCTION\u88ab\u8c03\u7528\uff0cCURLOPT_NOPROGRESS\u5fc5\u987b\u88ab\u8bbe\u7f6e\u4e3afalse\uff0cCURLOPT_PROGRESSDATA\u6307\u5b9a\u7684\u53c2\u6570\u5c06\u4f5c\u4e3aCURLOPT_PROGRESSFUNCTION\u6307\u5b9a\u51fd\u6570\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570<\/div>\n<div>\n6.\u00a0 \u00a0\u00a0 \u00a0\u00a0CURLOPT_TIMEOUT\uff0cCURLOPT_CONNECTIONTIMEOUT:<br \/>\nCURLOPT_TIMEOUT \u7531\u4e8e\u8bbe\u7f6e\u4f20\u8f93\u65f6\u95f4\uff0cCURLOPT_CONNECTIONTIMEOUT \u8bbe\u7f6e\u8fde\u63a5\u7b49\u5f85\u65f6\u95f4<\/div>\n<div>\n7. \u00a0 \u00a0 \u00a0\u00a0CURLOPT_FOLLOWLOCATION<br \/>\n\u8bbe\u7f6e\u91cd\u5b9a\u4f4dURL<\/div>\n<div>\n8.\u00a0\u00a0 \u00a0 \u00a0 CURLOPT_RANGE: CURLOPT_RESUME_FROM:<br \/>\n\u65ad\u70b9\u7eed\u4f20\u76f8\u5173\u8bbe\u7f6e\u3002CURLOPT_RANGE \u6307\u5b9achar *\u53c2\u6570\u4f20\u9012\u7ed9libcurl\uff0c\u7528\u4e8e\u6307\u660ehttp\u57df\u7684RANGE\u5934\u57df\uff0c\u4f8b\u5982\uff1a<br \/>\n\u8868\u793a\u5934500\u4e2a\u5b57\u8282\uff1abytes=0-499<br \/>\n\u8868\u793a\u7b2c\u4e8c\u4e2a500\u5b57\u8282\uff1abytes=500-999<br \/>\n\u8868\u793a\u6700\u540e500\u4e2a\u5b57\u8282\uff1abytes=-500<br \/>\n\u8868\u793a500\u5b57\u8282\u4ee5\u540e\u7684\u8303\u56f4\uff1abytes=500-<br \/>\n\u7b2c\u4e00\u4e2a\u548c\u6700\u540e\u4e00\u4e2a\u5b57\u8282\uff1abytes=0-0,-1<br \/>\n\u540c\u65f6\u6307\u5b9a\u51e0\u4e2a\u8303\u56f4\uff1abytes=500-600,601-999<br \/>\nCURLOPT_RESUME_FROM \u4f20\u9012\u4e00\u4e2along\u53c2\u6570\u7ed9libcurl\uff0c\u6307\u5b9a\u4f60\u5e0c\u671b\u5f00\u59cb\u4f20\u9012\u7684\u00a0\u504f\u79fb\u91cf\u3002<\/div>\n<div>\n<strong>\u56db\u3001<\/strong>\u00a0<strong>curl_easy_perform\u00a0\u51fd\u6570\u8bf4\u660e\uff08error \u72b6\u6001\u7801\uff09<\/strong><br \/>\n\u8be5\u51fd\u6570\u662f\u5b8c\u6210curl_easy_setopt\u6307\u5b9a\u7684\u6240\u6709\u9009\u9879\uff0c\u672c\u8282\u91cd\u70b9\u4ecb\u7ecdcurl_easy_perform\u7684\u8fd4\u56de\u503c\u3002\u8fd4\u56de0\u610f\u5473\u4e00\u5207ok\uff0c\u975e0\u4ee3\u8868\u9519\u8bef\u53d1\u751f\u3002\u4e3b\u8981\u9519\u8bef\u7801\u8bf4\u660e\uff1a<br \/>\n1.\u00a0 \u00a0\u00a0CURLE_OK<br \/>\n\u4efb\u52a1\u5b8c\u6210\u4e00\u5207\u90fd\u597d<br \/>\n2\u00a0 \u00a0\u00a0\u00a0CURLE_UNSUPPORTED_PROTOCOL<br \/>\n\u4e0d\u652f\u6301\u7684\u534f\u8bae\uff0c\u7531URL\u7684\u5934\u90e8\u6307\u5b9a<br \/>\n3\u00a0 \u00a0\u00a0\u00a0CURLE_COULDNT_CONNECT<br \/>\n\u4e0d\u80fd\u8fde\u63a5\u5230remote \u4e3b\u673a\u6216\u8005\u4ee3\u7406<br \/>\n4\u00a0 \u00a0\u00a0\u00a0CURLE_REMOTE_ACCESS_DENIED<br \/>\n\u8bbf\u95ee\u88ab\u62d2\u7edd<br \/>\n5\u00a0 \u00a0\u00a0\u00a0CURLE_HTTP_RETURNED_ERROR<br \/>\nHttp\u8fd4\u56de\u9519\u8bef<br \/>\n6 \u00a0 \u00a0\u00a0CURLE_READ_ERROR<br \/>\n\u8bfb\u672c\u5730\u6587\u4ef6\u9519\u8bef<\/div>\n<div>\u8981\u83b7\u53d6\u8be6\u7ec6\u7684\u9519\u8bef\u63cf\u8ff0\u5b57\u7b26\u4e32\uff0c\u53ef\u4ee5\u901a\u8fc7<strong>const char *curl_easy_strerror(CURLcode errornum )<\/strong>\u00a0\u8fd9\u4e2a\u51fd\u6570\u53d6\u5f97.<\/div>\n<div><\/div>\n<div>\n<p><strong>\u4e94\u3001libcurl\u4f7f\u7528\u7684HTTP\u6d88\u606f\u5934<\/strong><br \/>\n\u5f53\u4f7f\u7528libcurl\u53d1\u9001http\u8bf7\u6c42\u65f6\uff0c\u5b83\u4f1a\u81ea\u52a8\u6dfb\u52a0\u4e00\u4e9bhttp\u5934\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7CURLOPT_HTTPHEADER\u5c5e\u6027\u624b\u52a8\u66ff\u6362\u3001\u6dfb\u52a0\u6216\u5220\u9664\u76f8\u5e94 \u7684HTTP\u6d88\u606f\u5934\u3002<br \/>\nHost<br \/>\nhttp1.1\uff08\u5927\u90e8\u5206http1.0)\u7248\u672c\u90fd\u8981\u6c42\u5ba2\u6237\u7aef\u8bf7\u6c42\u63d0\u4f9b\u8fd9\u4e2a\u4fe1\u606f\u5934\u3002<br \/>\nPragma<br \/>\n&#8220;no-cache&#8221;\u3002\u8868\u793a\u4e0d\u8981\u7f13\u51b2\u6570\u636e\u3002<br \/>\nAccept<br \/>\n&#8220;*\/*&#8221;\u3002\u8868\u793a\u5141\u8bb8\u63a5\u6536\u4efb\u4f55\u7c7b\u578b\u7684\u6570\u636e\u3002<br \/>\nExpect<br \/>\n\u4ee5POST\u7684\u65b9\u5f0f\u5411HTTP\u670d\u52a1\u5668\u63d0\u4ea4\u8bf7\u6c42\u65f6\uff0clibcurl\u4f1a\u8bbe\u7f6e\u8be5\u6d88\u606f\u5934\u4e3a&#8221;100-continue&#8221;\uff0c\u5b83\u8981\u6c42\u670d\u52a1\u5668\u5728\u6b63\u5f0f\u5904\u7406\u8be5\u8bf7\u6c42\u4e4b\u524d\uff0c\u8fd4\u56de\u4e00 \u4e2a&#8221;OK&#8221;\u6d88\u606f\u3002\u5982\u679cPOST\u7684\u6570\u636e\u5f88\u5c0f\uff0clibcurl\u53ef\u80fd\u4e0d\u4f1a\u8bbe\u7f6e\u8be5\u6d88\u606f\u5934\u3002<br \/>\n<strong>\u81ea\u5b9a\u4e49\u9009\u9879<\/strong><br \/>\n\u5f53\u524d\u8d8a\u6765\u8d8a\u591a\u7684\u534f\u8bae\u90fd\u6784\u5efa\u5728HTTP\u534f\u8bae\u4e4b\u4e0a\uff08\u5982\uff1asoap\uff09\uff0c\u8fd9\u4e3b\u8981\u5f52\u529f\u4e8eHTTP\u7684\u53ef\u9760\u6027\uff0c\u4ee5\u53ca\u88ab\u5e7f\u6cdb\u4f7f\u7528\u7684\u4ee3\u7406\u652f\u6301\uff08\u53ef\u4ee5\u7a7f\u900f\u5927\u90e8\u5206\u9632\u706b\u5899\uff09\u3002 \u8fd9\u4e9b\u534f\u8bae\u7684\u4f7f\u7528\u65b9\u5f0f\u4e0e\u4f20\u7edfHTTP\u53ef\u80fd\u6709\u5f88\u5927\u7684\u4e0d\u540c\u3002\u5bf9\u6b64\uff0clibcurl\u4f5c\u4e86\u5f88\u597d\u7684\u652f\u6301\u3002<br \/>\n\u81ea\u5b9a\u4e49\u8bf7\u6c42\u65b9\u5f0f(CustomRequest)<br \/>\nHTTP\u652f\u6301GET, HEAD\u6216\u8005POST\u63d0\u4ea4\u8bf7\u6c42\u3002\u53ef\u4ee5\u8bbe\u7f6eCURLOPT_CUSTOMREQUEST\u6765\u8bbe\u7f6e\u81ea\u5b9a\u4e49\u7684\u8bf7\u6c42\u65b9\u5f0f\uff0clibcurl\u9ed8\u8ba4\u4ee5GET\u65b9\u5f0f\u63d0\u4ea4\u8bf7\u6c42\uff1a<br \/>\n<strong>curl_easy_setopt(easy_handle, CURLOPT_CUSTOMREQUEST, &#8220;MYOWNREQUEST&#8221;);<\/strong><\/p>\n<p><strong>\u4fee\u6539\u6d88\u606f\u5934<\/strong><br \/>\nHTTP\u534f\u8bae\u63d0\u4f9b\u4e86\u6d88\u606f\u5934\uff0c\u8bf7\u6c42\u6d88\u606f\u5934\u7528\u4e8e\u544a\u8bc9\u670d\u52a1\u5668\u5982\u4f55\u5904\u7406\u8bf7\u6c42\uff1b\u54cd\u5e94\u6d88\u606f\u5934\u5219\u544a\u8bc9\u6d4f\u89c8\u5668\u5982\u4f55\u5904\u7406\u63a5\u6536\u5230\u7684\u6570\u636e\u3002\u5728libcurl\u4e2d\uff0c\u4f60\u53ef\u4ee5\u81ea\u7531\u7684\u6dfb\u52a0 \u8fd9\u4e9b\u6d88\u606f\u5934\uff1a<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>struct curl_slist *headers=NULL; \/* init to NULL is important *\/\r\nheaders = curl_slist_append(headers, \"Hey-server-hey: how are you?\");\r\nheaders = curl_slist_append(headers, \"X-silly-content: yes\");\r\n\/* pass our list of custom made headers *\/\r\ncurl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);\r\ncurl_easy_perform(easyhandle); \/* transfer http *\/\r\ncurl_slist_free_all(headers); \/* free the header list *\/<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u5bf9\u4e8e\u5df2\u7ecf\u5b58\u5728\u7684\u6d88\u606f\u5934\uff0c\u53ef\u4ee5\u91cd\u65b0\u8bbe\u7f6e\u5b83\u7684\u503c\uff1a<\/p>\n<div class=\"cnblogs_code\">\n<pre>headers = curl_slist_append(headers, \"Accept: Agent-007\"); \r\nheaders = curl_slist_append(headers, \"Host: munged.host.line\");<\/pre>\n<\/div>\n<p><strong>\u5220\u9664\u6d88\u606f\u5934<\/strong><br \/>\n\u5bf9\u4e8e\u4e00\u4e2a\u5df2\u7ecf\u5b58\u5728\u7684\u6d88\u606f\u5934\uff0c\u8bbe\u7f6e\u5b83\u7684\u5185\u5bb9\u4e3a\u7a7a\uff0clibcurl\u5728\u53d1\u9001\u8bf7\u6c42\u65f6\u5c31\u4e0d\u4f1a\u540c\u65f6\u63d0\u4ea4\u8be5\u6d88\u606f\u5934\uff1a<\/p>\n<div class=\"cnblogs_code\">\n<pre>headers = curl_slist_append(headers, \"Accept:\");<\/pre>\n<\/div>\n<p><strong>\u00a0<\/strong><\/p>\n<p><strong>\u516d\u3001\u83b7\u53d6http\u5e94\u7b54\u5934\u4fe1\u606f<\/strong><\/p>\n<p>\u53d1\u51fahttp\u8bf7\u6c42\u540e\uff0c\u670d\u52a1\u5668\u4f1a\u8fd4\u56de\u5e94\u7b54\u5934\u4fe1\u606f\u548c\u5e94\u7b54\u6570\u636e\uff0c\u5982\u679c\u4ec5\u4ec5\u662f\u6253\u5370\u5e94\u7b54\u5934\u7684\u6240\u6709\u5185\u5bb9\uff0c\u5219\u76f4\u63a5\u53ef\u4ee5\u901a\u8fc7curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, \u6253\u5370\u51fd\u6570)\u7684\u65b9\u5f0f\u6765\u5b8c\u6210\uff0c\u8fd9\u91cc\u9700\u8981\u83b7\u53d6\u7684\u662f\u5e94\u7b54\u5934\u4e2d\u7279\u5b9a\u7684\u4fe1\u606f\uff0c\u6bd4\u5982\u5e94\u7b54\u7801\u3001cookies\u5217\u8868\u7b49\uff0c\u5219\u9700\u8981\u901a\u8fc7\u4e0b\u9762\u8fd9\u4e2a\u51fd\u6570\uff1a<br \/>\n<strong>\u00a0 \u00a0 CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, &#8230; );<\/strong><br \/>\ninfo\u53c2\u6570\u5c31\u662f\u6211\u4eec\u9700\u8981\u83b7\u53d6\u7684\u5185\u5bb9\uff0c\u4e0b\u9762\u662f\u4e00\u4e9b\u53c2\u6570\u503c:<br \/>\n1.CURLINFO_RESPONSE_CODE<br \/>\n\u83b7\u53d6\u5e94\u7b54\u7801<br \/>\n2.CURLINFO_HEADER_SIZE<br \/>\n\u5934\u5927\u5c0f<br \/>\n3.CURLINFO_COOKIELIST<br \/>\ncookies\u5217\u8868<\/p>\n<p>\u9664\u4e86\u83b7\u53d6\u5e94\u7b54\u4fe1\u606f\u5916\uff0c\u8fd9\u4e2a\u51fd\u6570\u8fd8\u80fd\u83b7\u53d6curl\u7684\u4e00\u4e9b\u5185\u90e8\u4fe1\u606f\uff0c\u5982\u8bf7\u6c42\u65f6\u95f4\u3001\u8fde\u63a5\u65f6\u95f4\u7b49\u7b49\u3002<\/p>\n<p>\u66f4\u591a\u7684\u53c2\u6570\u53ef\u4ee5\u53c2\u8003API\u6587\u6863\u3002<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<div>\n<p><strong>\u4e03\u3001\u591a\u7ebf\u7a0b\u95ee\u9898<\/strong><br \/>\n\u9996\u5148\u4e00\u4e2a\u57fa\u672c\u539f\u5219\u5c31\u662f\uff1a\u7edd\u5bf9\u4e0d\u5e94\u8be5\u5728\u7ebf\u7a0b\u4e4b\u95f4\u5171\u4eab\u540c\u4e00\u4e2alibcurl handle(CURL *\u5bf9\u8c61)\uff0c\u4e0d\u7ba1\u662feasy handle\u8fd8\u662fmulti handle\uff08\u672c\u6587\u53ea\u4ecb\u7ecdeasy_handle\uff09\u3002\u4e00\u4e2a\u7ebf\u7a0b\u6bcf\u6b21\u53ea\u80fd\u4f7f\u7528\u4e00\u4e2ahandle\u3002<br \/>\nlibcurl\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u4f46\u6709\u4e24\u70b9\u4f8b\u5916\uff1a\u4fe1\u53f7(signals)\u548cSSL\/TLS handler\u3002 \u4fe1\u53f7\u7528\u4e8e\u8d85\u65f6\u5931\u6548\u540d\u5b57\u89e3\u6790(timing out name resolves)\u3002libcurl\u4f9d\u8d56\u5176\u4ed6\u7684\u5e93\u6765\u652f\u6301SSL\/STL\uff0c\u6240\u4ee5\u7528\u591a\u7ebf\u7a0b\u7684\u65b9\u5f0f\u8bbf\u95eeHTTPS\u6216FTPS\u7684URL\u65f6\uff0c\u5e94\u8be5\u6ee1\u8db3\u8fd9\u4e9b\u5e93\u5bf9\u591a\u7ebf\u7a0b \u64cd\u4f5c\u7684\u4e00\u4e9b\u8981\u6c42\u3002\u8be6\u7ec6\u53ef\u4ee5\u53c2\u8003\uff1a<br \/>\nOpenSSL:\u00a0<a href=\"http:\/\/www.openssl.org\/docs\/crypto\/threads.html#DESCRIPTION\">http:\/\/www.openssl.org\/docs\/crypto\/threads.html#DESCRIPTION<\/a><\/p>\n<p>GnuTLS:\u00a0<a href=\"http:\/\/www.gnu.org\/software\/gnutls\/manual\/html_node\/Multi_002dthreaded-applications.html\">http:\/\/www.gnu.org\/software\/gnutls\/manual\/html_node\/Multi_002dthreaded-applications.html<\/a><\/p>\n<p>NSS: \u5ba3\u79f0\u662f\u591a\u7ebf\u7a0b\u5b89\u5168\u7684\u3002<\/p>\n<p><strong>\u516b\u3001\u4ec0\u4e48\u65f6\u5019libcurl\u65e0\u6cd5\u6b63\u5e38\u5de5\u4f5c<\/strong><br \/>\n\u4f20\u8f93\u5931\u8d25\u603b\u662f\u6709\u539f\u56e0\u7684\u3002\u4f60\u53ef\u80fd\u9519\u8bef\u7684\u8bbe\u7f6e\u4e86\u4e00\u4e9blibcurl\u7684\u5c5e\u6027\u6216\u8005\u6ca1\u6709\u6b63\u786e\u7684\u7406\u89e3\u67d0\u4e9b\u5c5e\u6027\u7684\u542b\u4e49\uff0c\u6216\u8005\u662f\u8fdc\u7a0b\u4e3b\u673a\u8fd4\u56de\u4e00\u4e9b\u65e0\u6cd5\u88ab\u6b63\u786e\u89e3\u6790\u7684\u5185\u5bb9\u3002<br \/>\n\u8fd9\u91cc\u6709\u4e00\u4e2a\u9ec4\u91d1\u6cd5\u5219\u6765\u5904\u7406\u8fd9\u4e9b\u95ee\u9898\uff1a\u5c06CURLOPT_VERBOSE\u5c5e\u6027\u8bbe\u7f6e\u4e3a1\uff0clibcurl\u4f1a\u8f93\u51fa\u901a\u4fe1\u8fc7\u7a0b\u4e2d\u7684\u4e00\u4e9b\u7ec6\u8282\u3002\u5982\u679c\u4f7f\u7528\u7684\u662fhttp\u534f \u8bae\uff0c\u8bf7\u6c42\u5934\/\u54cd\u5e94\u5934\u4e5f\u4f1a\u88ab\u8f93\u51fa\u3002\u5c06CURLOPT_HEADER\u8bbe\u4e3a1\uff0c\u8fd9\u4e9b\u5934\u4fe1\u606f\u5c06\u51fa\u73b0\u5728\u6d88\u606f\u7684\u5185\u5bb9\u4e2d\u3002<br \/>\n\u5f53\u7136\u4e0d\u53ef\u5426\u8ba4\u7684\u662f\uff0clibcurl\u8fd8\u5b58\u5728bug\u3002<br \/>\n\u5982\u679c\u4f60\u5bf9\u76f8\u5173\u7684\u534f\u8bae\u4e86\u89e3\u8d8a\u591a\uff0c\u5728\u4f7f\u7528libcurl\u65f6\uff0c\u5c31\u8d8a\u4e0d\u5bb9\u6613\u72af\u9519\u3002<\/p>\n<p><strong>\u4e5d\u3001\u5173\u4e8e\u5bc6\u7801<\/strong><br \/>\n\u5ba2\u6237\u7aef\u5411\u670d\u52a1\u5668\u53d1\u9001\u8bf7\u6c42\u65f6\uff0c\u8bb8\u591a\u534f\u8bae\u90fd\u8981\u6c42\u63d0\u4f9b\u7528\u6237\u540d\u4e0e\u5bc6\u7801\u3002libcurl\u63d0\u4f9b\u4e86\u591a\u79cd\u65b9\u5f0f\u6765\u8bbe\u7f6e\u5b83\u4eec\u3002<br \/>\n\u4e00\u4e9b\u534f\u8bae\u652f\u6301\u5728URL\u4e2d\u76f4\u63a5\u6307\u5b9a\u7528\u6237\u540d\u548c\u5bc6\u7801\uff0c\u7c7b\u4f3c\u4e8e\uff1a protocol:\/\/user:password@example.com\/path\/\u3002libcurl\u80fd\u6b63\u786e\u7684\u8bc6\u522b\u8fd9\u79cdURL\u4e2d\u7684\u7528\u6237\u540d\u4e0e\u5bc6\u7801\u5e76\u6267\u884c \u76f8\u5e94\u7684\u64cd\u4f5c\u3002\u5982\u679c\u4f60\u63d0\u4f9b\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801\u4e2d\u6709\u7279\u6b8a\u5b57\u7b26\uff0c\u9996\u5148\u5e94\u8be5\u5bf9\u5176\u8fdb\u884cURL\u7f16\u7801\u3002<br \/>\n\u4e5f\u53ef\u4ee5\u901a\u8fc7CURLOPT_USERPWD\u5c5e\u6027\u6765\u8bbe\u7f6e\u7528\u6237\u540d\u4e0e\u5bc6\u7801\u3002\u53c2\u6570\u662f\u683c\u5f0f\u5982 \u201cuser:password \u201d\u7684\u5b57\u7b26\u4e32\uff1a<br \/>\n<strong>\u00a0curl_easy_setopt(easy_handle, CURLOPT_USERPWD, &#8220;user_name:password&#8221;)<\/strong>;<br \/>\n\u6709\u65f6\u5019\u5728\u8bbf\u95ee\u4ee3\u7406\u670d\u52a1\u5668\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u65f6\u65f6\u8981\u6c42\u63d0\u4f9b\u7528\u6237\u540d\u548c\u5bc6\u7801\u8fdb\u884c\u7528\u6237\u8eab\u4efd\u9a8c\u8bc1\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0clibcurl\u63d0\u4f9b\u4e86\u53e6 \u4e00\u4e2a\u5c5e\u6027CURLOPT_PROXYUSERPWD\uff1a<br \/>\n<strong>curl_easy_setopt(easy_handle, CURLOPT_PROXYUSERPWD, &#8220;user_name:password&#8221;);<\/strong><br \/>\n\u5728UNIX\u5e73\u53f0\u4e0b\uff0c\u8bbf\u95eeFTP\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801\u53ef\u80fd\u4f1a\u88ab\u4fdd\u5b58\u5728$HOME\/.netrc\u6587\u4ef6\u4e2d\u3002libcurl\u652f\u6301\u76f4\u63a5\u4ece\u8fd9\u4e2a\u6587\u4ef6\u4e2d\u83b7\u53d6\u7528\u6237\u540d\u4e0e\u5bc6\u7801\uff1a<br \/>\n<strong>curl_easy_setopt(easy_handle, CURLOPT_NETRC, 1L);<\/strong><br \/>\n\u5728\u4f7f\u7528SSL\u65f6\uff0c\u53ef\u80fd\u9700\u8981\u63d0\u4f9b\u4e00\u4e2a\u79c1\u94a5\u7528\u4e8e\u6570\u636e\u5b89\u5168\u4f20\u8f93\uff0c\u901a\u8fc7CURLOPT_KEYPASSWD\u6765\u8bbe\u7f6e\u79c1\u94a5\uff1a<br \/>\n<strong>\u00a0curl_easy_setopt(easy_handle, CURLOPT_KEYPASSWD, &#8220;keypassword&#8221;);<\/strong><\/p>\n<p><strong>\u5341\u3001HTTP\u9a8c\u8bc1<\/strong><br \/>\n\u5728\u4f7f\u7528HTTP\u534f\u8bae\u65f6\uff0c\u5ba2\u6237\u7aef\u6709\u5f88\u591a\u79cd\u65b9\u5f0f\u5411\u670d\u52a1\u5668\u63d0\u4f9b\u9a8c\u8bc1\u4fe1\u606f\u3002\u9ed8\u8ba4\u7684 HTTP\u9a8c\u8bc1\u65b9\u6cd5\u662f&#8221;Basic\u201d\uff0c\u5b83\u5c06\u7528\u6237\u540d\u4e0e\u5bc6\u7801\u4ee5\u660e\u6587\u7684\u65b9\u5f0f\u3001\u7ecfBase64\u7f16\u7801\u540e\u4fdd\u5b58\u5728HTTP\u8bf7\u6c42\u5934\u4e2d\uff0c\u53d1\u5f80\u670d\u52a1\u5668\u3002\u5f53\u7136\u8fd9\u4e0d\u592a\u5b89\u5168\u3002<br \/>\n\u5f53\u524d\u7248\u672c\u7684libcurl\u652f\u6301\u7684\u9a8c\u8bc1\u65b9\u6cd5\u6709\uff1abasic, Digest, NTLM, Negotiate, GSS-Negotiate and SPNEGO\u3002\uff08\u8bd1\u8005\u611f\u53f9\uff1a\u641eWeb\u8fd9\u4e48\u591a\u5e74\uff0c\u5c3d\u7136\u4e0d\u77e5\u9053\u8fd9\u4e9bHttp\u7684\u9a8c\u8bc1\u65b9\u5f0f\uff0c\u5b9e\u5728\u60ed\u6127\u3002\uff09\u53ef\u4ee5\u901a\u8fc7CURLOPT_HTTPAUTH\u5c5e\u6027\u6765\u8bbe\u7f6e\u5177\u4f53 \u7684\u9a8c\u8bc1\u65b9\u5f0f\uff1a<br \/>\n<strong>curl_easy_setopt(easy_handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);<\/strong><br \/>\n\u5411\u4ee3\u7406\u670d\u52a1\u5668\u53d1\u9001\u9a8c\u8bc1\u4fe1\u606f\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7CURLOPT_PROXYAUTH\u8bbe\u7f6e\u9a8c\u8bc1\u65b9\u5f0f\uff1a<br \/>\n<strong>\u00a0curl_easy_setopt(easy_handle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);<\/strong><br \/>\n\u4e5f\u53ef\u4ee5\u540c\u65f6\u8bbe\u7f6e\u591a\u79cd\u9a8c\u8bc1\u65b9\u5f0f\uff08\u901a\u8fc7\u6309\u4f4d\u4e0e\uff09\uff0c \u4f7f\u7528\u2018CURLAUTH_ANY\u2018\u5c06\u5141\u8bb8libcurl\u53ef\u4ee5\u9009\u62e9\u4efb\u4f55\u5b83\u6240\u652f\u6301\u7684\u9a8c\u8bc1\u65b9\u5f0f\u3002\u901a\u8fc7CURLOPT_HTTPAUTH\u6216 CURLOPT_PROXYAUTH\u5c5e\u6027\u8bbe\u7f6e\u7684\u591a\u79cd\u9a8c\u8bc1\u65b9\u5f0f\uff0clibcurl\u4f1a\u5728\u8fd0\u884c\u65f6\u9009\u62e9\u4e00\u79cd\u5b83\u8ba4\u4e3a\u662f\u6700\u597d\u7684\u65b9\u5f0f\u4e0e\u670d\u52a1\u5668\u901a\u4fe1\uff1a<br \/>\n<strong>\u00a0curl_easy_setopt(easy_handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST|CURLAUTH_BASIC);<\/strong><br \/>\n<strong>\u00a0 \u00a0 \/\/ curl_easy_setopt(easy_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);<\/strong><\/p>\n<p><strong>\u00a0<\/strong><\/p>\n<\/div>\n<div><strong>\u5341\u4e00\u3001\u4ee3\u7801\u793a\u4f8b<\/strong><\/div>\n<div><strong>\u4e0b\u8f7d\u7684libcurl\u4e2d\u81ea\u5e26\u4e86\u5f88\u591a\u793a\u4f8b\u4ee3\u7801\uff0c\u5728docs\\examples\u76ee\u5f55\u4e0b\uff0c\u5efa\u8bae\u4e0b\u8f7d\u8be5\u5e93\u540e\u597d\u597d\u9605\u8bfb\u4e00\u4e0b\u8fd9\u4e9b\u4ee3\u7801\u3002<\/strong><\/div>\n<div><strong>libcurl\u7684API\u6587\u6863\u5728docs\\libcurl\\index.html\u4e2d\u3002<\/strong><\/div>\n<div><strong>1.\u57fa\u672c\u7684http GET\/POST\u64cd\u4f5c<\/strong><\/div>\n<div>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>#include &lt;stdio.h&gt;\r\n#include &lt;curl\/curl.h&gt;\r\nbool getUrl(char *filename)\r\n{\r\n    CURL *curl;\r\n    CURLcode res;\r\n    FILE *fp;\r\n    if ((fp = fopen(filename, \"w\")) == NULL)  \/\/ \u8fd4\u56de\u7ed3\u679c\u7528\u6587\u4ef6\u5b58\u50a8\r\n        return false;\r\n    struct curl_slist *headers = NULL;\r\n    headers = curl_slist_append(headers, \"Accept: Agent-007\");\r\n    curl = curl_easy_init();    \/\/ \u521d\u59cb\u5316\r\n    if (curl)\r\n    {\r\n        \/\/curl_easy_setopt(curl, CURLOPT_PROXY, \"10.99.60.201:8080\");\/\/ \u4ee3\u7406\r\n        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);\/\/ \u6539\u534f\u8bae\u5934\r\n        curl_easy_setopt(curl, CURLOPT_URL,\"http:\/\/www.baidu.com\");\r\n        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); \/\/\u5c06\u8fd4\u56de\u7684http\u5934\u8f93\u51fa\u5230fp\u6307\u5411\u7684\u6587\u4ef6\r\n        curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); \/\/\u5c06\u8fd4\u56de\u7684html\u4e3b\u4f53\u6570\u636e\u8f93\u51fa\u5230fp\u6307\u5411\u7684\u6587\u4ef6\r\n        res = curl_easy_perform(curl);   \/\/ \u6267\u884c\r\n        if (res != 0) {\r\n\r\n            curl_slist_free_all(headers);\r\n            curl_easy_cleanup(curl);\r\n        }\r\n        fclose(fp);\r\n        return true;\r\n    }\r\n}\r\nbool postUrl(char *filename)\r\n{\r\n    CURL *curl;\r\n    CURLcode res;\r\n    FILE *fp;\r\n    if ((fp = fopen(filename, \"w\")) == NULL)\r\n        return false;\r\n    curl = curl_easy_init();\r\n    if (curl)\r\n    {\r\n        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, \"\/tmp\/cookie.txt\"); \/\/ \u6307\u5b9acookie\u6587\u4ef6\r\n        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, \"&amp;logintype=uid&amp;u=xieyan&amp;psw=xxx86\");    \/\/ \u6307\u5b9apost\u5185\u5bb9\r\n        \/\/curl_easy_setopt(curl, CURLOPT_PROXY, \"10.99.60.201:8080\");\r\n        curl_easy_setopt(curl, CURLOPT_URL, \" http:\/\/mail.sina.com.cn\/cgi-bin\/login.cgi \");   \/\/ \u6307\u5b9aurl\r\n        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);\r\n        res = curl_easy_perform(curl);\r\n        curl_easy_cleanup(curl);\r\n    }\r\n    fclose(fp);\r\n    return true;\r\n}\r\nint main(void)\r\n{\r\n    getUrl(\"\/tmp\/get.html\");\r\n    postUrl(\"\/tmp\/post.html\");\r\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p align=\"left\">\u7f16\u8bd1<strong>gcc\u00a0 get_post.c\u00a0 -o get_post\u00a0<\/strong><strong>\u2013<\/strong><strong>lcurl<\/strong><\/p>\n<p align=\"left\"><strong>.\/ get_post<\/strong><\/p>\n<p><strong>2<\/strong>\u00a0<strong>\u83b7\u53d6html\u7f51\u9875<\/strong><\/div>\n<div>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>#include &lt;stdio.h&gt;\r\n#include &lt;curl\/curl.h&gt;\r\n#include &lt;stdlib.h&gt;\r\nint main(int argc, char *argv[])\r\n{\r\n    CURL *curl;             \/\/\u5b9a\u4e49CURL\u7c7b\u578b\u7684\u6307\u9488\r\nCURLcode res;           \/\/\u5b9a\u4e49CURLcode\u7c7b\u578b\u7684\u53d8\u91cf\uff0c\u4fdd\u5b58\u8fd4\u56de\u72b6\u6001\u7801\r\n    if(argc!=2)\r\n    {\r\n        printf(\"Usage : file &lt;url&gt;;\\n\");\r\n        exit(1);\r\n    }\r\n \r\n    curl = curl_easy_init();        \/\/\u521d\u59cb\u5316\u4e00\u4e2aCURL\u7c7b\u578b\u7684\u6307\u9488\r\n    if(curl!=NULL)\r\n    {\r\n        \/\/\u8bbe\u7f6ecurl\u9009\u9879. \u5176\u4e2dCURLOPT_URL\u662f\u8ba9\u7528\u6237\u6307 \u5b9aurl. argv[1]\u4e2d\u5b58\u653e\u7684\u547d\u4ee4\u884c\u4f20\u8fdb\u6765\u7684\u7f51\u5740\r\n        curl_easy_setopt(curl, CURLOPT_URL, argv[1]);        \r\n        \/\/\u8c03\u7528curl_easy_perform \u6267\u884c\u6211\u4eec\u7684\u8bbe\u7f6e.\u5e76\u8fdb\u884c\u76f8\u5173\u7684\u64cd\u4f5c. \u5728\u8fd9 \u91cc\u53ea\u5728\u5c4f\u5e55\u4e0a\u663e\u793a\u51fa\u6765.\r\n        res = curl_easy_perform(curl);\r\n        \/\/\u6e05\u9664curl\u64cd\u4f5c.\r\n        curl_easy_cleanup(curl);\r\n    }\r\n    return 0;\r\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p align=\"left\">\u7f16\u8bd1<strong>gcc\u00a0 get_http.c\u00a0 -o get_http\u00a0<\/strong><strong>\u2013<\/strong><strong>lcurl<\/strong><\/p>\n<p align=\"left\"><strong>.\/ get_http\u00a0<a href=\"http:\/\/www.baidu.com\/\">www.baidu.com<\/a><\/strong><\/p>\n<p align=\"left\"><strong>\u00a0<\/strong><\/p>\n<\/div>\n<div><strong>3<\/strong>\u00a0<strong>\u7f51\u9875\u4e0b\u8f7d\u4fdd\u5b58\u5b9e\u4f8b<\/strong><\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>\/\/ \u91c7\u7528CURLOPT_WRITEFUNCTION \u5b9e\u73b0\u7f51\u9875\u4e0b\u8f7d\u4fdd\u5b58\u529f\u80fd\r\n#include &lt;stdio.h&gt;;\r\n#include &lt;stdlib.h&gt;;\r\n#include &lt;unistd.h&gt;;\r\n \r\n#include &lt;curl\/curl.h&gt;;\r\n#include &lt;curl\/types.h&gt;;\r\n#include &lt;curl\/easy.h&gt;;\r\n \r\nFILE *fp;  \/\/\u5b9a\u4e49FILE\u7c7b\u578b\u6307\u9488\r\n\/\/\u8fd9\u4e2a\u51fd\u6570\u662f\u4e3a\u4e86\u7b26\u5408CURLOPT_WRITEFUNCTION\u800c\u6784\u9020\u7684\r\n\/\/\u5b8c\u6210\u6570\u636e\u4fdd\u5b58\u529f\u80fd\r\nsize_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)  \r\n{\r\n    int written = fwrite(ptr, size, nmemb, (FILE *)fp);\r\n    return written;\r\n}\r\n \r\nint main(int argc, char *argv[])\r\n{\r\n    CURL *curl;\r\n \r\n    curl_global_init(CURL_GLOBAL_ALL);  \r\n    curl=curl_easy_init();\r\n    curl_easy_setopt(curl, CURLOPT_URL, argv[1]);  \r\n \r\n    if((fp=fopen(argv[2],\"w\"))==NULL)\r\n    {\r\n        curl_easy_cleanup(curl);\r\n        exit(1);\r\n    }\r\n\/\/\/\/CURLOPT_WRITEFUNCTION \u5c06\u540e\u7ee7\u7684\u52a8\u4f5c\u4ea4\u7ed9write_data\u51fd\u6570\u5904\u7406\r\n    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);  \r\n    curl_easy_perform(curl);\r\n    curl_easy_cleanup(curl);\r\n    exit(0);\r\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u7f16\u8bd1gcc\u00a0\u00a0save_http.c\u00a0\u00a0-o save_http \u2013lcurl<br \/>\n.\/ save_http\u00a0<a href=\"http:\/\/www.baidu.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">www.baidu.com<\/a><br \/>\n\/tmp\/baidu<\/div>\n<div>\n<strong>4<\/strong>\u00a0<strong>\u8fdb\u5ea6\u6761\u5b9e\u4f8b\u663e\u793a\u6587\u4ef6\u4e0b\u8f7d\u8fdb\u5ea6<\/strong><\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>\/\/ \u91c7\u7528CURLOPT_NOPROGRESS\uff0c CURLOPT_PROGRESSFUNCTION    CURLOPT_PROGRESSDATA \u5b9e\u73b0\u6587\u4ef6\u4f20\u8f93\u8fdb\u5ea6\u63d0\u793a\u529f\u80fd\r\n\/\/\u51fd\u6570\u91c7\u7528\u4e86gtk\u5e93\uff0c\u6545\u7f16\u8bd1\u65f6\u9700\u6307\u5b9agtk\u5e93\r\n\/\/\u51fd\u6570\u542f\u52a8\u4e13\u95e8\u7684\u7ebf\u7a0b\u7528\u4e8e\u663e\u793agtk \u8fdb\u5ea6\u6761bar\r\n#include &lt;stdio.h&gt;\r\n#include &lt;gtk\/gtk.h&gt;\r\n#include &lt;curl\/curl.h&gt;\r\n#include &lt;curl\/types.h&gt; \/* new for v7 *\/\r\n#include &lt;curl\/easy.h&gt; \/* new for v7 *\/\r\n \r\nGtkWidget *Bar;\r\n\/\/\/\/\u8fd9\u4e2a\u51fd\u6570\u662f\u4e3a\u4e86\u7b26\u5408CURLOPT_WRITEFUNCTION\u800c\u6784\u9020\u7684\r\n\/\/\u5b8c\u6210\u6570\u636e\u4fdd\u5b58\u529f\u80fd\r\nsize_t my_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream)\r\n{\r\n  return fwrite(ptr, size, nmemb, stream);\r\n}\r\n\/\/\u8fd9\u4e2a\u51fd\u6570\u662f\u4e3a\u4e86\u7b26\u5408CURLOPT_READFUNCTION\u800c\u6784\u9020\u7684\r\n\/\/\u6570\u636e\u4e0a\u4f20\u65f6\u4f7f\u7528\r\nsize_t my_read_func(void *ptr, size_t size, size_t nmemb, FILE *stream)\r\n{\r\n  return fread(ptr, size, nmemb, stream);\r\n}\r\n\/\/\u8fd9\u4e2a\u51fd\u6570\u662f\u4e3a\u4e86\u7b26\u5408CURLOPT_PROGRESSFUNCTION\u800c\u6784\u9020\u7684\r\n\/\/\u663e\u793a\u6587\u4ef6\u4f20\u8f93\u8fdb\u5ea6\uff0ct\u4ee3\u8868\u6587\u4ef6\u5927\u5c0f\uff0cd\u4ee3\u8868\u4f20 \u8f93\u5df2\u7ecf\u5b8c\u6210\u90e8\u5206\r\nint my_progress_func(GtkWidget *bar,\r\n                     double t, \/* dltotal *\/\r\n                     double d, \/* dlnow *\/\r\n                     double ultotal,\r\n                     double ulnow)\r\n{\r\n\/*  printf(\"%d \/ %d (%g %%)\\n\", d, t, d*100.0\/t);*\/\r\n  gdk_threads_enter();\r\n  gtk_progress_set_value(GTK_PROGRESS(bar), d*100.0\/t);\r\n  gdk_threads_leave();\r\n  return 0;\r\n}\r\n \r\nvoid *my_thread(void *ptr)\r\n{\r\n  CURL *curl;\r\n  CURLcode res;\r\n  FILE *outfile;\r\n  gchar *url = ptr;\r\n \r\n  curl = curl_easy_init();\r\n  if(curl)\r\n  {\r\n    outfile = fopen(\"test.curl\", \"w\");\r\n \r\n    curl_easy_setopt(curl, CURLOPT_URL, url);\r\n    curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);\r\n    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);\r\n    curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);\r\n    curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);\r\n    curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);\r\n    curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);\r\n \r\n    res = curl_easy_perform(curl);\r\n \r\n    fclose(outfile);\r\n    \/* always cleanup *\/\r\n    curl_easy_cleanup(curl);\r\n  }\r\n \r\n  return NULL;\r\n}\r\n \r\nint main(int argc, char **argv)\r\n{\r\n  GtkWidget *Window, *Frame, *Frame2;\r\n  GtkAdjustment *adj;\r\n \r\n  \/* Must initialize libcurl before any threads are started *\/\r\n  curl_global_init(CURL_GLOBAL_ALL);\r\n \r\n  \/* Init thread *\/\r\n  g_thread_init(NULL);\r\n \r\n  gtk_init(&amp;argc, &amp;argv);\r\n  Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);\r\n  Frame = gtk_frame_new(NULL);\r\n  gtk_frame_set_shadow_type(GTK_FRAME(Frame), GTK_SHADOW_OUT);\r\n  gtk_container_add(GTK_CONTAINER(Window), Frame);\r\n  Frame2 = gtk_frame_new(NULL);\r\n  gtk_frame_set_shadow_type(GTK_FRAME(Frame2), GTK_SHADOW_IN);\r\n  gtk_container_add(GTK_CONTAINER(Frame), Frame2);\r\n  gtk_container_set_border_width(GTK_CONTAINER(Frame2), 5);\r\n  adj = (GtkAdjustment*)gtk_adjustment_new(0, 0, 100, 0, 0, 0);\r\n  Bar = gtk_progress_bar_new_with_adjustment(adj);\r\n  gtk_container_add(GTK_CONTAINER(Frame2), Bar);\r\n  gtk_widget_show_all(Window);\r\n \r\n  if (!g_thread_create(&amp;my_thread, argv[1], FALSE, NULL) != 0)\r\n    g_warning(\"can't create the thread\");\r\n \r\n \r\n  gdk_threads_enter();\r\n  gtk_main();\r\n  gdk_threads_leave();\r\n  return 0;\r\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u7f16\u8bd1export PKG_CONFIG_PATH=\/usr\/lib\/pkgconfig\/<br \/>\ngcc progress.c \u2013o progress ` pkg-config &#8211;libs \u2013cflags gtk+-2..0` -lcurl \u2013lgthread-2.0<br \/>\n.\/ progress\u00a0\u00a0<a href=\"http:\/\/software.sky-union.cn\/index.asp\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/software.sky-union.cn\/index.asp<\/a><\/p>\n<p><strong>5<\/strong>\u00a0<strong>\u65ad\u70b9\u7eed\u4f20\u5b9e\u4f8b<\/strong><\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>\/\/\u91c7\u7528CURLOPT_RESUME_FROM_LARGE \u5b9e\u73b0\u6587\u4ef6\u65ad\u70b9\u7eed\u4f20\u529f\u80fd\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;stdio.h&gt;\r\n#include &lt;sys\/stat.h&gt;\r\n \r\n#include &lt;curl\/curl.h&gt;\r\n\/\/\u8fd9\u4e2a\u51fd\u6570\u4e3aCURLOPT_HEADERFUNCTION\u53c2\u6570\u6784\u9020\r\n\/* \u4ecehttp\u5934\u90e8\u83b7\u53d6\u6587\u4ef6size*\/\r\nsize_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb, void *stream) {\r\n       int r;\r\n       long len = 0;\r\n \r\n       \/* _snscanf() is Win32 specific *\/\r\n       \/\/ r = _snscanf(ptr, size * nmemb, \"Content-Length: %ld\\n\", &amp;len);\r\n r = sscanf(ptr, \"Content-Length: %ld\\n\", &amp;len);\r\n       if (r) \/* Microsoft: we don't read the specs *\/\r\n              *((long *) stream) = len;\r\n \r\n       return size * nmemb;\r\n}\r\n \r\n\/* \u4fdd\u5b58\u4e0b\u8f7d\u6587\u4ef6 *\/\r\nsize_t wirtefunc(void *ptr, size_t size, size_t nmemb, void *stream)\r\n{\r\n        return fwrite(ptr, size, nmemb, stream);\r\n}\r\n \r\n\/*\u8bfb\u53d6\u4e0a\u4f20\u6587\u4ef6 *\/\r\nsize_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)\r\n{\r\n       FILE *f = stream;\r\n       size_t n;\r\n \r\n       if (ferror(f))\r\n              return CURL_READFUNC_ABORT;\r\n \r\n       n = fread(ptr, size, nmemb, f) * size;\r\n \r\n       return n;\r\n}\r\n \r\n\/\/ \u4e0b\u8f7d \u6216\u8005\u4e0a\u4f20\u6587\u4ef6\u51fd\u6570\r\nint download(CURL *curlhandle, const char * remotepath, const char * localpath,\r\n           long timeout, long tries)\r\n{\r\n       FILE *f;\r\n       curl_off_t local_file_len = -1 ;\r\n       long filesize =0 ;\r\n       \r\n       CURLcode r = CURLE_GOT_NOTHING;\r\n       int c;\r\n  struct stat file_info;\r\n  int use_resume = 0;\r\n  \/* \u5f97\u5230\u672c\u5730\u6587\u4ef6\u5927\u5c0f *\/\r\n  \/\/if(access(localpath,F_OK) ==0)\r\n  \r\n    if(stat(localpath, &amp;file_info) == 0) \r\n     {\r\n        local_file_len =  file_info.st_size;\r\n        use_resume  = 1;\r\n      }\r\n  \/\/\u91c7\u7528\u8ffd\u52a0\u65b9\u5f0f\u6253\u5f00\u6587\u4ef6\uff0c\u4fbf\u4e8e\u5b9e\u73b0\u6587\u4ef6\u65ad\u70b9\u7eed\u4f20\u5de5\u4f5c\r\n       f = fopen(localpath, \"ab+\"); \r\n       if (f == NULL) {\r\n              perror(NULL);\r\n              return 0;\r\n       }\r\n \r\n       \/\/curl_easy_setopt(curlhandle, CURLOPT_UPLOAD, 1L);\r\n \r\n       curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath);\r\n \r\n              curl_easy_setopt(curlhandle, CURLOPT_CONNECTTIMEOUT, timeout);  \/\/ \u8bbe\u7f6e\u8fde\u63a5\u8d85\u65f6\uff0c\u5355\u4f4d\u79d2\r\n       \/\/\u8bbe\u7f6ehttp \u5934\u90e8\u5904\u7406\u51fd\u6570\r\n       curl_easy_setopt(curlhandle, CURLOPT_HEADERFUNCTION, getcontentlengthfunc);\r\n       curl_easy_setopt(curlhandle, CURLOPT_HEADERDATA, &amp;filesize);\r\n \/\/ \u8bbe\u7f6e\u6587\u4ef6\u7eed\u4f20\u7684\u4f4d\u7f6e\u7ed9libcurl\r\n       curl_easy_setopt(curlhandle, CURLOPT_RESUME_FROM_LARGE, use_resume?local_file_len:0);\r\n \r\n       curl_easy_setopt(curlhandle, CURLOPT_WRITEDATA, f);\r\n       curl_easy_setopt(curlhandle, CURLOPT_WRITEFUNCTION, wirtefunc);\r\n \r\n       \/\/curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc);\r\n       \/\/curl_easy_setopt(curlhandle, CURLOPT_READDATA, f);\r\n       curl_easy_setopt(curlhandle, CURLOPT_NOPROGRESS, 1L);\r\n       curl_easy_setopt(curlhandle, CURLOPT_VERBOSE, 1L);\r\n  \r\n  \r\n  r = curl_easy_perform(curlhandle);\r\n       \r\n \r\n       fclose(f);\r\n \r\n       if (r == CURLE_OK)\r\n              return 1;\r\n       else {\r\n              fprintf(stderr, \"%s\\n\", curl_easy_strerror(r));\r\n              return 0;\r\n       }\r\n}\r\n \r\nint main(int c, char **argv) {\r\n       CURL *curlhandle = NULL;\r\n \r\n       curl_global_init(CURL_GLOBAL_ALL);\r\n       curlhandle = curl_easy_init();\r\n \r\n       \/\/download(curlhandle, \"ftp:\/\/user:pass@host\/path\/file\", \"C:\\\\file\", 0, 3);\r\n  download(curlhandle , \"http:\/\/software.sky-union.cn\/index.asp\",\"\/work\/index.asp\",1,3);\r\n       curl_easy_cleanup(curlhandle);\r\n       curl_global_cleanup();\r\n \r\n       return 0;\r\n}<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"https:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u7f16\u8bd1gcc\u00a0\u00a0resume.c\u00a0\u00a0-o resume \u2013lcurl<br \/>\n.\/ resume<\/p><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\u5730\u5740 \u76ee\u5f55\u7d22\u5f15\uff1a \u4e00\u3001LibCurl<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[118],"class_list":["post-4068","post","type-post","status-publish","format-standard","hentry","tag-02-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/4068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=4068"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/4068\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=4068"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=4068"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=4068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}