libcurl库为什么最新的没有msvc的版本?

libcurl库为什么最新的没有msvc的版本?只有mingw的?在vs2013里面用这个会产生不可预知的错误吗?

求解惑,万分感谢!!!

2个回答

有那个minGW版本的,不过可以转化成MSVC版本的。其实MFC封装的WinHTTP也挺好用的,curl确实简单易行。

vs2012的工程直接升级到2013,然后重新编译就可以了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
linu下用libcurl库下载文件报错问题
最近在做linux下用libcurl从自己搭建的http服务器上下载文件,代码写好,编译ok,但是每次给出url时,总是报错url格式错误,哪位大神能帮忙看看呢
libcurl Post 方法上传文件求助!
Hi, 我在我的虚拟机上编译好了libcurl库,然后参照列程写了个简单的http post上传文件。 在构建form表单的时候,如果把参数设置为CURLFORM_FILE 并输入对应的文件名,可以再服务器(HFS)指定的文件路径下看到我上传的文件。 但我要使用libcurl的平台没有文件系统,所以就打算用CURLFORM_BUFFER参数来设置数据区。结果这个能够上传,可是不能再文件路径下看到这个文件。 HFS的上传权限打开了的。 对比两种方式的wireshark包,发现在Content-Disposition这个请求头后面的filename没指定。 于是用curl_slist_append却手动设定这个值为我想要的任意名称,问题又来了,正常的流程中,filename这个参数 是添加在MIME Multipart Media后面的。但手动添加的curl_list却在Hypertext Transfer Procotol后面。这下查找了好久的资料也没看到怎么处理,网上各位大神弄的都是一个文件上传到另一个文件的方式。 请问谁有经验,麻烦解惑,谢谢! 上传测试源代码和两个wireshark截图 success.bmp(直接传入file方式,可以创建文件的截图)fail.bmp(用缓冲区地址作为数据输入,不可以创建制定的文件) main.c 测试程序 没看到哪儿上传附件,我发个链接,谢谢!http://pan.baidu.com/s/1ntAc6ql
关于HttpClient,webkit,libcurl的问题
请问有哪些封装的比较简单的C/C++的HttpClient ? 我尝试自己用Socket封装以实现最基本的http或代理的get,post请求 但是直接访问网页还好,基本都可以返回html 但用代理就不行了,会有丢包,协议头和内容被代理分开传回的情况,自己处理比较麻烦 所以想用现成的库,我了解的有libcurl和webkit 故有以下几个问题: 1.libcurl通过http代理访问网站还需要自己写代码吗? 2.libcurl可以解析js代码吗? 3.webkit(qtwebkit)可以只解析页面(包含js)而不显示窗口吗? 4.有什么现成的项目或者demo比较容易实现我的功能或者可供参考? -------------------------------------------------------------------------- 注:我要做的东西是网络爬虫 -------------------------------------------------------------------------- 以上几个问题比较傻逼,只是我想一次搞定,这两天一直在查资料走弯路 求解惑,问题比较多,实在没有C币,不好意思,感激不尽
LIBCURL.DLL FTP 客户端
``` int CEVDownLoadDlg::FtpUploadFile(CURL * curl,char *pUrl, unsigned short usPort,FILE * fpUploadFile, int nUploadFileSize) { ASSERT(curl != NULL); curl_easy_reset(curl); curl_easy_setopt(curl, CURLOPT_HEADER, 0); char szCurlUrl[128] = { 0 }; sprintf(szCurlUrl, "%s", pUrl); curl_easy_setopt(curl, CURLOPT_URL, szCurlUrl); curl_easy_setopt(curl, CURLOPT_PORT, 21); /*user & pwd*/ std::string NameAndKey = "root:000111"; curl_easy_setopt(curl, CURLOPT_USERPWD, NameAndKey.c_str()); FILE *ptempfile = fopen("E:\\DTools_Debug\\Projects\\1001.txt", "rb"); long nsize; if (ptempfile!=NULL) { fseek(ptempfile,0,SEEK_END); nsize = ftell(ptempfile); fseek(ptempfile,0,SEEK_SET); } curl_easy_setopt(curl, CURLOPT_READDATA, ptempfile); curl_easy_setopt(curl, CURLOPT_READFUNCTION,FtpReadFunction); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1); curl_easy_setopt(curl, CURLOPT_INFILESIZE, nsize); // curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS, 1); curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 5); curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5); CURLcode res = curl_easy_perform(curl); /* Check for errors */ if (res != CURLE_OK) { return 1; } return 0; } size_t CEVDownLoadDlg::FtpReadFunction(void *ptr, size_t size, size_t nmemb, void *stream) { if (stream == NULL || ptr == NULL || size == 0) return 0; FILE* pfile = (FILE*)stream; size_t retcode=fread(ptr,size,nmemb,pfile);//read return retcode; } ``` 求大佬分析一下 问题1:FtpReadFunction中 nmenber 大小怎么设置 curl_easy_setopt(curl, CURLOPT_INFILESIZE, nsize);好像没有影响 问题2:CURLcode res = curl_easy_perform(curl); 报错(LIBCURL.DLL): 0xC0000005: Access Violation. (汇编 mov dword ptr [eax],esi) 其中eax=0;
求大神指教libcurl问题:使用ssh登录服务器时报错了。
刚接触libcurl,菜鸟一个。我的libcurl的版本是: curl 7.42.1 (x86_64-unknown-linux-gnu) libcurl/7.42.1 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 libssh2/1.4.3 librtmp/2.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 然后我用命令:curl -u username sftp://123.123.123.123 回车后输入密码后就出现了以下错误: curl: (51) SSL peer certificate or SSH remote key was not OK。 纠结了两天了,求大神指导!
开源库libcurl无法删除ftp非空目录问题
如题,目前需要在curl库的基础上进行封装成自己使用的库, 但是在使用RMD命令对ftp服务器上的文件夹删除时发现没办法删除非空目录,查资料发现RMD命令本身就是这样设定的,不知道有没有其他参数或者命令可以实现。 求方法,资料,思路。有资料的给个链接也行。(c/c++)
封装的libcurl类在使用vector时出错
环境: 系统:Windows 8专业版(32位) IDE:VS 2013 curl库版本:libcurl-7.19.3-win32-ssl-msvc 运行时提示 > 0x61DE35F7 (curllib.dll) (curltest.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0xFEEEFF02 时发生访问冲突。 #include "stdafx.h" #include "curl/curl.h" #include <iostream> #include <fstream> #include <sstream> #include <string> #include <vector> #include <io.h> #pragma comment(lib, "curl/libcurl_imp.lib") #define PROGNAME "curltest" #define RETRY_TIME 5 #define URL_SIZE 100 using namespace std; size_t print_callback(char* buffer, size_t size, size_t nitems, void *outstream) { return nitems; } size_t write_callback(char* buffer, size_t size, size_t nitems, string &text) { size_t sizes = size * nitems; string temp(buffer, sizes); text += temp; return sizes; } int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) { printf("%.1f%%\t", 100 * (dlnow / dltotal)); cout << "\r"; cout.flush(); return 0; } class Novel { private: CURL *eh; CURLcode res; int http_code; int retry_time; public: int id; double filesize; bool is_exist; char *url = new char[URL_SIZE]; string *text = new string; Novel(int id) { this->id = id; retry_time = RETRY_TIME; sprintf_s(url, URL_SIZE, "dl.wenku8.cn/down.php?type=txt&id=%d", id); eh = curl_easy_init(); curl_easy_setopt(eh, CURLOPT_URL, url); curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, print_callback); curl_easy_setopt(eh, CURLOPT_NOPROGRESS, 1); curl_easy_setopt(eh, CURLOPT_PROGRESSFUNCTION, progress_callback); curl_easy_setopt(eh, CURLOPT_FOLLOWLOCATION, 1); curl_easy_setopt(eh, CURLOPT_HEADER, 1); curl_easy_setopt(eh, CURLOPT_NOBODY, 1); res = curl_easy_perform(eh); curl_easy_getinfo(eh, CURLINFO_HTTP_CODE, &http_code); if (http_code == 404) { is_exist = false; filesize = -1; return; } else is_exist = true; curl_easy_getinfo(eh, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &filesize); } int start() { if (is_exist == false) { cerr << "文件不存在" << endl; return 1; } else { curl_easy_setopt(eh, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(eh, CURLOPT_NOBODY, 0); curl_easy_setopt(eh, CURLOPT_HEADER, 0); curl_easy_setopt(eh, CURLOPT_NOPROGRESS, 0); curl_easy_setopt(eh, CURLOPT_WRITEDATA, text); cout << "正在下载 " << id << ".txt" << endl; res = curl_easy_perform(eh); if (res != CURLE_OK) { cerr << curl_easy_strerror(res) << endl; return -1; } cout << "下载完成" << endl; } return 0; } ~Novel() { curl_easy_cleanup(eh); delete[] url; delete text; } }; int main(int argc, char *argv[]) { /* int retry_time = RETRY_TIME; int id = 1; vector<Novel> vNovel; for (id = 1; retry_time!=0; id++) { vNovel.push_back(id); if (vNovel[id - 1].start()) { retry_time--; } else { retry_time = RETRY_TIME; } } getchar(); vNovel.clear(); // 这句出错 */ // 上面是出错的地方,下面无错 Novel test(1); test.start(); getchar(); return 0; }
c+使用libcurl登录问题,比如登录support.huawei.com
c+使用libcurl登录问题,比如登录support.huawei.com为什么我用*CURLOPT_POSTFIELDS和*CURLOP_USERPWD都不行啊
如何用libcurl访问http?用c++语言。求大神代码,我的老是出错
如何用libcurl访问http?用c++语言。求大神代码,我的老是出错
Protocol https not supported or disabled in libcurl
1.PHP使用curl发送post请求提示标题错误. 2.代码演示 ```php function curlPost($url, $data = array()) { if (is_array($data)) { $data = http_build_query($data); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_TIMEOUT, 30); if (!empty($options)) { curl_setopt_array($ch, $options); } $data = curl_exec($ch); recordLog(1,curl_error($ch)); curl_close($ch); return $data; } ``` 3.问题解决 需要加上如下代码 ```php // 访问的借口为https协议时 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); ``` 4.其它原因 a.有可能url中有空格
c++使用libcurl 多线程的问题
多个请求 easy handle 添加到 multi handle里面,然后执行curl_multi_performance,但是执行到一半的时候发生网络故障,但是函数还是执行成功,且running_handle参数一直不变,请教如何判断哪些请求失败了。 代码片段如下: ... CURLMcode curMCode; CURLM * curl_m = curl_multi_init(); const int reqNum = 1000; CURL* curlArr[reqNum]; for (auto& cur : curlArr) { cur = GetKLineReqCUrl(); curMCode = curl_multi_add_handle(curl_m, cur); } int running_handles = 0; while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curl_m, &running_handles)) { cout << running_handles << endl; } do { int numfds = 0; CURLMcode _waitResult = curl_multi_wait(curl_m, NULL, 0, 20000, &numfds); // 此函数永远返回成功,发生错误的时候numfds为0 if (_waitResult != CURLM_OK) { std::cout << "curl_multi_wait return: " << _waitResult << std::endl; } curMCode = curl_multi_perform(curl_m, &running_handles); // 发生故障的时候返回值也一直是CURLM_OK,且running_handles一直不减少 } while (running_handles); std::cout << "curl_multi_perform completed" << std::endl; int msgs_left; CURLMsg * msg; while (msg = curl_multi_info_read(curl_m, &msgs_left)) { if (CURLMSG_DONE == msg->msg) { cout << "recv result: " << msg->data.result << endl; } } for (auto cur : curlArr) { curl_multi_remove_handle(curl_m, cur); curl_easy_cleanup(cur); } curl_multi_cleanup(curl_m); ...
libcurl 如何以 CURLAUTH_DIGEST 方式通过认证
libcurl 以 CURLAUTH_DIGEST 方式无法通过认证。如下图所示: ![图片说明](https://img-ask.csdn.net/upload/201903/07/1551953669_580097.jpg) 如果以CURLAUTH_BASIC方式,并且服务端也改为basic认证,可以通过,如下图所示: ![图片说明](https://img-ask.csdn.net/upload/201903/07/1551953912_259786.png) libcurl接口代码如下: ![图片说明](https://img-ask.csdn.net/upload/201903/07/1551954091_436060.png) 看CURLAUTH_DIGEST 过程还需要realm,nonce,response,不知道代码改如何写?
无法定位序数xx于动态链接库
![图片说明](https://img-ask.csdn.net/upload/201705/02/1493733306_467643.png) 刚编译完的libcurl.lib写了一个测试程序,编译无任何警告和错误,运行时出现这个错误, 不知道什么原因
libcurl 进行HTTPS进行双向认证返回CURLE_SSL_CONNECT_ERROR失败
最近公司项目需要SSL双向认证,我就用libcurl来实现,但是在做Demo的时候请求是没问题的,可是吧代码放到主程序(windows下 Unicode字符集)里面,返回的总是 CURLE_SSL_CONNECT_ERROR不知道是哪里出问题了,下面是源码 int CUrlHttp::Request(std::string strRequestType, std::string strUrl, std::string &strReport, std::string &strRetHeader, std::vector<std::string> vecHeader, std::string strParam/* ="" */, std::string strCookie/* ="" */, std::string strCaPath/* ="" */, int nTimeOut/* =0 */) { strUrl = "https://192.168.5.176:4433/ipass00/http/localhost/welcome"; CURL * curl; curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str()); if ( strRequestType.compare("post")==0 || strRequestType.compare("POST") == 0 ) { curl_easy_setopt(curl, CURLOPT_POST, 1); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(strParam.c_str()));//post内容长度 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strParam.c_str()); } else { curl_easy_setopt(curl, CURLOPT_POST, 0);//get请求 } //设置http头 curl_slist * headers = NULL; for ( int i=0; i<vecHeader.size(); i++ ) { if (!vecHeader.at(i).empty()) { headers = curl_slist_append(headers, vecHeader.at(i).c_str()); } } if (headers != NULL) { curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); } curl_easy_setopt(curl,CURLOPT_SSLVERSION,1); //判断是否有证书 if(!strCaPath.empty()) { curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false); } else { curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, true); curl_easy_setopt(curl,CURLOPT_CAINFO,"C:/ssl/cacert.pem"); curl_easy_setopt(curl,CURLOPT_SSLCERT,"C:/ssl/client.pem"); curl_easy_setopt(curl,CURLOPT_SSLCERTPASSWD,"11111111"); curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM"); curl_easy_setopt(curl,CURLOPT_SSLKEY,"C:/ssl/clientkey.pem"); curl_easy_setopt(curl,CURLOPT_SSLKEYPASSWD,"11111111"); curl_easy_setopt(curl,CURLOPT_SSLKEYTYPE,"PEM"); } //Web服务器一般会重定向链接,比如访问http:/xxx/x1.do自动转到http:/xxx/x2.do //所以一定要设置CURLOPT_FOLLOWLOCATION为1,否则重定向后的数据不会返回。 curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION,1); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); //可以看到调试信息 curl_easy_setopt(curl,CURLOPT_HEADERFUNCTION,_CURL_::write_data); curl_easy_setopt(curl, CURLOPT_WRITEHEADER, &strRetHeader); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _CURL_::write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strReport); if ( nTimeOut > 0 ) { curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, nTimeOut); curl_easy_setopt(curl, CURLOPT_TIMEOUT, nTimeOut); } if (!strCookie.empty()) { curl_easy_setopt(curl, CURLOPT_COOKIEFILE, strCookie.c_str()); } CURLcode code = curl_easy_perform(curl); if(code != CURLE_OK){ printf("curl_wasy_perform error = %s",curl_easy_strerror(code)); } if ( headers != NULL ) { curl_slist_free_all(headers); } curl_easy_cleanup(curl); //打印出来 // std::string strReportData; // strReportData.append(strReportHeader); // strReportData.append(strReport); // TRACE("request:%s url:%s report:%s", strRequestType.c_str(), strUrl.c_str(), strReportData.c_str()); return code; }
遇到蛋疼的:error LNK2001:
1>libcrypto.lib(ui_openssl.obj) : error LNK2001: 无法解析的外部符号 __acrt_iob_func 1>libcrypto.lib(eng_openssl.obj) : error LNK2001: 无法解析的外部符号 __acrt_iob_func 1>libcrypto.lib(e_capi.obj) : error LNK2001: 无法解析的外部符号 __acrt_iob_func 1>libcrypto.lib(pem_lib.obj) : error LNK2001: 无法解析的外部符号 __acrt_iob_func 1>libcrypto.lib(ui_openssl.obj) : error LNK2001: 无法解析的外部符号 __stdio_common_vfprintf 1>libcrypto.lib(eng_openssl.obj) : error LNK2001: 无法解析的外部符号 __stdio_common_vfprintf 1>libcrypto.lib(pem_lib.obj) : error LNK2001: 无法解析的外部符号 __stdio_common_vfprintf 1>libcrypto.lib(dso_win32.obj) : error LNK2001: 无法解析的外部符号 __stdio_common_vsprintf 1>libcrypto.lib(cryptlib.obj) : error LNK2001: 无法解析的外部符号 __stdio_common_vsprintf 1>libcrypto.lib(cryptlib.obj) : error LNK2001: 无法解析的外部符号 __stdio_common_vswprintf 1>libcrypto.lib(cryptlib.obj) : error LNK2001: 无法解析的外部符号 __stdio_common_vsscanf 1>libcrypto.lib(v3_utl.obj) : error LNK2001: 无法解析的外部符号 __stdio_common_vsscanf 1>libcurl.lib(gzlib.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsprintf 1>libcurl.lib(gzwrite.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsprintf 1>libcurl.lib(mprintf.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsprintf 1>libcurl.lib(cookie.obj) : error LNK2001: 无法解析的外部符号 __imp___acrt_iob_func 1>libcurl.lib(url.obj) : error LNK2001: 无法解析的外部符号 __imp___acrt_iob_func 1>libcurl.lib(mprintf.obj) : error LNK2001: 无法解析的外部符号 __imp___acrt_iob_func 1>libcurl.lib(formdata.obj) : error LNK2001: 无法解析的外部符号 __imp___acrt_iob_func 1>libcurl.lib(imap.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(ftp.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(http_proxy.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(http.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(parsedate.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(telnet.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(rtsp.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(cookie.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(hostip.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(url.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 1>libcurl.lib(transfer.obj) : error LNK2001: 无法解析的外部符号 __imp___stdio_common_vsscanf 在网上找到一些方法:::添加过两个库文件,。,,也设置过多线程/mtd启动,,,也添加过BUILDING_LIBCURL。。。都不好使。。。依然出现这个错误,,是怎么回事???(VS2013)
VS2010+QT4.8.6中引入libcurl.lib实现ftp上传功能
单独在VS2010 C++中已经实现ftp得上传功能,但是在嵌入QT项目中引用libcurl.lib总是报错,如下: 错误 111 error LNK2001: 无法解析的外部符号 __imp___time64 ../../ ibcurl.lib(http.obj) ![图片说明](https://img-ask.csdn.net/upload/201509/15/1442306591_373003.jpg)
linux下libcurl异步收发问题
最近在使用libcurl异步收发消息时碰到一个问题,实在没头绪,有哪位大大可以帮忙看看,多谢 一、目标:使用multi interface实现消息异步收发,两个线程,一个线程发消息,另一个线程收消息 二、问题: 1、环回收发无问题,但是发送到其它IP有问题,抓包能建立TCP连接,但是马上会断开,没有发出数据 2、程序会发生段错误具体信息如下 ``` (gdb) bt #0 0x0000003d0e432222 in curl_multi_fdset (multi_handle=0x604120, read_fd_set=0x7ffff7fd4d00, write_fd_set=0x0, exc_fd_set=<value optimized out>, max_fd=0x7ffff7fd4bfc) at multi.c:874 #1 0x0000000000400d08 in curl_multi_select (curl_m=0x604120) at curl_send.c:30 #2 0x0000000000400fb3 in curl_multi_recv () at curl_send.c:110 #3 0x0000003cf84079d1 in start_thread () from /lib64/libpthread.so.0 #4 0x0000003cf80e88fd in clone () from /lib64/libc.so.6 (gdb) f 0 #0 0x0000003d0e432222 in curl_multi_fdset (multi_handle=0x604120, read_fd_set=0x7ffff7fd4d00, write_fd_set=0x0, exc_fd_set=<value optimized out>, max_fd=0x7ffff7fd4bfc) at multi.c:874 874 in multi.c (gdb) f 1 #1 0x0000000000400d08 in curl_multi_select (curl_m=0x604120) at curl_send.c:30 30 curl_multi_fdset(curl_m, &fd_read, NULL, NULL, &max_fd); (gdb) ``` 三、代码 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <pthread.h> #include <curl/curl.h> CURLM *g_curl_m = NULL; int curl_multi_select(CURLM *curl_m) { int ret = 0; struct timeval timeout_tv; fd_set fd_read; fd_set fd_write; fd_set fd_except; int max_fd = -1; if (NULL == curl_m) { return -1; } FD_ZERO(&fd_read); FD_ZERO(&fd_write); FD_ZERO(&fd_except); timeout_tv.tv_sec = 1; timeout_tv.tv_usec = 0; curl_multi_fdset(curl_m, &fd_read, NULL, NULL, &max_fd); if (-1 == max_fd) { return -1; } int select_ret = select(max_fd + 1, &fd_read, NULL, NULL, &timeout_tv); if (-1 == select_ret) { ret = -1; } else { ret = 0; } return ret; } size_t save_response(void *buffer, size_t size, size_t nmemb, void *userp) { static int recv_times = 0; recv_times++; printf("recv response:\n%d\n", recv_times); printf("%s\n", buffer); return size * nmemb; } void curl_multi_send() { int send_times = 0; int running_handle_count = 0; char auth[32] = {0}; while(1) { CURL *easy_handle = NULL; struct curl_slist *http_header = NULL; send_times++; memset(auth, 0, sizeof(auth)); easy_handle = curl_easy_init(); snprintf(auth, sizeof(auth), "Authorization:%d", send_times); http_header = curl_slist_append(http_header, auth); http_header = curl_slist_append(http_header, "User-Agent: freecwmp"); http_header = curl_slist_append(http_header, "Content-Type: text/xml"); http_header = curl_slist_append(http_header, "Expect:"); curl_easy_setopt(easy_handle, CURLOPT_URL, "http://guest:guest@10.55.0.156:9000/"); curl_easy_setopt(easy_handle, CURLOPT_HTTPHEADER, http_header); curl_easy_setopt(easy_handle, CURLOPT_POSTFIELDS, ""); curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, save_response); curl_multi_add_handle(g_curl_m, easy_handle); while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(g_curl_m, &running_handle_count)) { } printf("Success send http msg.\n"); usleep(10000000); } return; } void curl_multi_recv() { int msgs_left = 0; int running_handles = 0; CURLM *curl_m = NULL; CURLMsg *msg = NULL; curl_m = g_curl_m; while(1) { if (0 == curl_multi_select(curl_m)) { msgs_left = 0; running_handles = 0; while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(curl_m, &running_handles)) { } while ((msg = curl_multi_info_read(curl_m, &msgs_left))) { if (CURLMSG_DONE == msg->msg) { curl_multi_remove_handle(curl_m, msg->easy_handle); } } } usleep(100000); } return; } int main(int argc, char *argv[]) { curl_global_init(CURL_GLOBAL_ALL); g_curl_m = curl_multi_init(); pthread_t send_pid = {0}; pthread_t receive_pid = {0}; //pthread_attr_t attr = {0}; //pthread_attr_init(&attr); //pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create(&receive_pid, NULL, (void *) curl_multi_recv, NULL); pthread_create(&send_pid, NULL, (void *) curl_multi_send, NULL); //pthread_attr_destroy(&attr); pthread_join(send_pid, NULL); pthread_join(receive_pid, NULL); curl_global_cleanup(); return 0; } ```
curl到底能不能实现文件上传到第三方服务器
网上看到的curl,那些命令都是最基本的东西,都是什么模拟上传, 测试的结果都是本地搭的服务器, ①如果用curl命令,到底能不能实现上传一个文件到百度云盘,首先就是登陆到百度云盘,它可以吗? ②如果不在libcurl里自己写,就登陆而言curl命令知道要POST的表单里数据有什么吗(username,password,autolog...?)?显然是不知道啊。 那这么命令到底能干啥? ③就算在libcurl里,自己写出了登陆到百度云的程序,那对应上传的接口不知道?还是不能上传文件,只能使用官网提供的API吗? ④写一个脚本,自动上传文件,(到百度云,新浪云,这些第三方服务器)该用什么?
第一次来csdn,问问大神关于http上传文件原理之类的。
因为最近在使用C调用libcurl库,涉及文件上传到http服务器,不了解这一块,我想知道: 1—我本地搭建的apache-tomcat服务器,它支持文件上传吗? 2—如果支持,我文件传到了什么地方?在我本地F:\apache-tomcat-6.0.13\work\Catalina\localhost里面能找到不? 3—如果不支持,我想做本地上传文件到http服务器的测试,该怎么办啊? 4—类似地,如果我想在C程序文件里实现直接把文件写到百度网盘,用curl是否可实现? 谢谢各位!
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问