如何用libcurl访问http?用c++语言。求大神代码,我的老是出错

如何用libcurl访问http?用c++语言。求大神代码,我的老是出错

2个回答

点击链接加入群【多科学堂】:https://jq.qq.com/?_wv=1027&k=41HSh3e

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何用libcurl访问http?用c++语言。求大神代码,我的老是出错
如何用libcurl访问http?用c++语言。求大神代码,我的老是出错
linu下用libcurl库下载文件报错问题
最近在做linux下用libcurl从自己搭建的http服务器上下载文件,代码写好,编译ok,但是每次给出url时,总是报错url格式错误,哪位大神能帮忙看看呢
求大神指教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。 纠结了两天了,求大神指导!
c+使用libcurl登录问题,比如登录support.huawei.com
c+使用libcurl登录问题,比如登录support.huawei.com为什么我用*CURLOPT_POSTFIELDS和*CURLOP_USERPWD都不行啊
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币,不好意思,感激不尽
PHP Curl 转C# libcurl 或C#代码, PHP POST 提交XML转C#×
PHP代码 ``` $account = 'abc'; $password = 'abc123'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://www.fdd.com/new_orders.php/"); curl_setopt($ch, CURLOPT_USERPWD, "$account.':'.$password"); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);//CURLAUTH_ANY curl_setopt($ch, CURLOPT_PROXY,'127.0.0.1:8888');//设置代理服务器 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 4); curl_setopt($ch, CURLOPT_POSTFIELDS, array('xml_request' => "$xml_request")); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close')); $result = curl_exec($ch);// 执行并获取HTML文档内容 curl_close($ch);// 释放curl句柄 header( "Content-Type: text/xml; charset=UTF-8"); echo $result; ``` 需要转成C# libCurl 或C#代码, 网上 很少C# libCrul资料,没数据返回,请指点 ``` Curl.GlobalInit((int)CURLinitFlag.CURL_GLOBAL_ALL); Easy easy = new Easy(); Easy.WriteFunction wf = new Easy.WriteFunction(OnWriteData); easy.SetOpt(CURLoption.CURLOPT_URL, URL); easy.SetOpt(CURLoption.CURLOPT_USERPWD, Account + ":" + password); easy.SetOpt(CURLoption.CURLOPT_HTTPAUTH,"0" ); easy.SetOpt(CURLoption.CURLOPT_SSL_VERIFYPEER, false); easy.SetOpt(CURLoption.CURLOPT_TIMEOUT, "4"); easy.SetOpt(CURLoption.CURLOPT_POST, true); easy.SetOpt(CURLoption.CURLOPT_POSTFIELDS, XMLData); easy.SetOpt(CURLoption.CURLOPT_HTTPHEADER, "Content-Type: text/xml; charset=UTF-8"); easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, wf); //easy.SetOpt(CURLoption.CURLOPT_POST, ture); easy.Perform(); easy.Cleanup(); Curl.GlobalCleanup(); ``` 直接给C#代码参考,不胜感激
libcurl库为什么最新的没有msvc的版本?
libcurl库为什么最新的没有msvc的版本?只有mingw的?在vs2013里面用这个会产生不可预知的错误吗? 求解惑,万分感谢!!!
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,不知道代码改如何写?
第一次来csdn,问问大神关于http上传文件原理之类的。
因为最近在使用C调用libcurl库,涉及文件上传到http服务器,不了解这一块,我想知道: 1—我本地搭建的apache-tomcat服务器,它支持文件上传吗? 2—如果支持,我文件传到了什么地方?在我本地F:\apache-tomcat-6.0.13\work\Catalina\localhost里面能找到不? 3—如果不支持,我想做本地上传文件到http服务器的测试,该怎么办啊? 4—类似地,如果我想在C程序文件里实现直接把文件写到百度网盘,用curl是否可实现? 谢谢各位!
封装的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; }
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 进行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; }
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; } ```
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中有空格
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)
C语言写python扩展的时候,undefined symbol: curl_easy_perform
今天又写来一个扩展 然后是一个使用来libcurl包的C模块,想用这个模块替代不稳定的python httplib,然后编译啥的也没有问题,可是最后import进去的时候 报错了 undefined symbol: curl_easy_perform 这是C的源代码 ``` #include <stdio.h> #include <curl/curl.h> #include <stdlib.h> #include <string.h> #include <openssl/md5.h> #include <python2.7/Python.h> size_t memory_callback(void *data, size_t size, size_t nmemb, void *content) { size_t realsize = size *nmemb; char *p = *(char **)content; size_t len = p ? strlen(p) : 0; *(char **)content = realloc(p, len + realsize + 1); p = *(char **)content; memcpy(p + len, data, realsize); p[len + realsize] = '\0'; return realsize; } size_t get_content(char *appid, char *secret_key, char *q, char *from ,char *to, char **content) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { char myurl[1000] = "http://api.fanyi.baidu.com/api/trans/vip/translate?"; char salt[60]; int a = rand(); sprintf(salt,"%d",a); char sign[120] = ""; strcat(sign,appid); strcat(sign,q); strcat(sign,salt); strcat(sign,secret_key); printf("%s\n",sign); unsigned char md[16]; int i; char tmp[3]={'\0'},buf[33]={'\0'}; MD5((const unsigned char *)sign, strlen((const char *)sign), md); for (i = 0; i < 16; i++) { sprintf(tmp,"%2.2x",md[i]); strcat(buf,tmp); } printf("%s\n",buf); strcat(myurl,"appid="); strcat(myurl,appid); strcat(myurl,"&q="); strcat(myurl,q); strcat(myurl,"&from="); strcat(myurl,from); strcat(myurl,"&to="); strcat(myurl,to); strcat(myurl,"&salt="); strcat(myurl,salt); strcat(myurl,"&sign="); strcat(myurl,buf); printf("%s\n",myurl); /* always cleanup */ curl_easy_setopt(curl, CURLOPT_URL, myurl); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, memory_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)content); res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } return 0; } static PyObject *xhttp(PyObject *self, PyObject *args) { char *content = NULL; char *appid; char * secret_key; char *q; char *from; char *to; if(!PyArg_ParseTuple(args, "s|ssss", &appid, &secret_key, &q, &from, &to)) { return NULL; } get_content(appid, secret_key, q, from, to, &content); return Py_BuildValue("s", content); if(content) free(content); } static PyMethodDef httpMethods[] = { {"xhttp", (PyCFunction)xhttp, METH_VARARGS}, {NULL, NULL, 0, NULL} }; PyMODINIT_FUNC initxhttp(void) { Py_InitModule("xhttp", httpMethods); } ``` 然后用来 ``` python ./setup.py build ``` 不行 ``` gcc -fpic -lcurl -lssl -c -l /usr/include/python2.7 -l /usr/lib/python2.7/config xhttp.c gcc -share -o xhttp.so xhttp.o ``` 最后是可以生成build目录和.o .so文件,但是就是从python shell 中import 进去的时候,会报错 大神下班顺便回答个问题呗~~~
请大神解决一下这个问题 php curl error:35 error:140770FC
cURL error 35: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) ![图片说明](https://img-ask.csdn.net/upload/201803/05/1520246872_229017.png) 各位大佬帮帮忙
开源库libcurl无法删除ftp非空目录问题
如题,目前需要在curl库的基础上进行封装成自己使用的库, 但是在使用RMD命令对ftp服务器上的文件夹删除时发现没办法删除非空目录,查资料发现RMD命令本身就是这样设定的,不知道有没有其他参数或者命令可以实现。 求方法,资料,思路。有资料的给个链接也行。(c/c++)
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库——点这里跳转 文章目录Python语言高频重点汇总**GitHub面试宝典仓库——点这里跳转**1. 函数-传参2. 元类3. @staticmethod和@classmethod两个装饰器4. 类属性和实例属性5. Python的自省6. 列表、集合、字典推导式7. Python中单下划线和双下划线8. 格式化字符串中的%和format9.
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Qt实践录:开篇
本系列文章介绍笔者的Qt实践之路。 背景 笔者首次接触 Qt 大约是十多年前,当时试用了 Qt ,觉得不如 MFC 好用。现在 Qt 的 API、文档等都比较完善,在年初决定重新拾起,正所谓技多不压身,将 Qt 当为一种谋生工具亦未尝不可。利用春节假期的集中时间,快速专攻一下。 本系列名为“Qt实践”,故不是教程,笔者对 Qt 的定位是“使用”,可以帮助快速编写日常的工具,如串口、网络等。所以不
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
一条链接即可让黑客跟踪你的位置! | Seeker工具使用
搬运自:冰崖的部落阁(icecliffsnet) 严正声明:本文仅限于技术讨论,严禁用于其他用途。 请遵守相对应法律规则,禁止用作违法途径,出事后果自负! 上次写的防社工文章里边提到的gps定位信息(如何防止自己被社工或人肉) 除了主动收集他人位置信息以外,我们还可以进行被动收集 (没有技术含量) Seeker作为一款高精度地理位置跟踪工具,同时也是社交工程学(社会工程学)爱好者...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c# 数组类型 泛型约束 c#的赛狗日程序 c# 传递数组 可变参数 c# 生成存储过程 c# list 补集 c#获得所有窗体 c# 当前秒数转成年月日 c#中的枚举 c# 计算校验和 连续随机数不重复c#
立即提问