Tag: libcurl

如何正确重用curl手柄

我想正确地重用一个curl句柄,这样它就不会给我错误和正常的function。 假设我有这段代码: CURL *curl; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_USERAGENT, “Mozilla/5.0…”); curl_easy_setopt(curl, CURLOPT_URL, “http://www.google.com”); curl_easy_perform(curl); curl_easy_setopt(curl, CURLOPT_URL, “http://www.bbc.com”); curl_easy_perform(curl); curl_easy_cleanup(curl); curl_global_cleanup(); 这是重用curl手柄的好方法吗? 或者我需要在该句柄上使用curl_easy_reset()吗? 我也很感激,如果有人建议你应该避免curl。 也许有人可以给我一个已经存在的信息来源的链接?

为libcurl添加自签名SSL证书

我在我的C应用程序中使用libcurl与我设置的HTTPS服务器进行通信。 我在该服务器上生成了一个我希望与curl一起使用的自签名证书。 我知道将CURLOPT_SSL_VERIFYPEER设置为0以绕过SSLvalidation,但我希望将生成的证书添加到curl的“有效”CA证书中。 我已尝试将CURLOPT_CAPATH和CURLOPT_SSLCERT设置为服务器SSL公钥的位置,但无法通过validation。 如何添加自己的CA /自签名证书,以便libcurl成功validation它?

如何使用libcurl使用摘要式身份validation发布http请求

我正在尝试执行发布请求,我正在尝试使用摘要式身份validation。 使用libcurl ,我设置了选项: url_easy_setopt(curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); curl_easy_setopt(curl_handle, CURLOPT_USERPWD, “user:pdw”); 在设置所有其他选项(post,url和所有内容)之前。 服务器关闭我的连接,我认为没有摘要。 我只是不知道如何自动获得摘要的挑战 – 响应行为。 如果我将HTTPAUTH设置为CURLAUTH_BASIC它HTTPAUTH这些东西进行编码 ,我在VERBOSE选项中看到包含authorization = basic的标头。 使用摘要没有标题。 你知道我怎么做,或者你能给我一些例子吗? 我真的到处搜寻。

C – URL编码

有一种简单的方法在C中进行URL编码吗? 我正在使用libcurl,但我还没有找到方法。 具体来说,我需要做百分之百逃脱。

未找到libcurl符号

真是愚蠢的C问题。 我正在尝试在这里构建源代码,以便我可以开始为自己修改它 http://curl.haxx.se/libcurl/c/ftpget.html 我下载文件,然后运行 gcc -o test ftpget.c 得到 Undefined symbols: “_curl_global_init”, referenced from: _main in ccFchguB.o “_curl_easy_perform”, referenced from: _main in ccFchguB.o “_curl_easy_setopt”, referenced from: _main in ccFchguB.o _main in ccFchguB.o _main in ccFchguB.o _main in ccFchguB.o “_curl_easy_cleanup”, referenced from: _main in ccFchguB.o “_curl_easy_init”, referenced from: _main in ccFchguB.o “_curl_global_cleanup”, referenced from: _main in […]

libcurl – 保持连接“打开”以上传多个文件(FTP)

我需要将目录上传到我的应用程序上的FTP服务器,并计划使用libcurl 。 我看到没有直接的方法来上传包含许多文件的目录,这对我来说很有意义。 但是,我无法在上传许多文件时找到任何提及。 如果我得到目录中的文件列表,我可以在循环中上传它们。 选项CURLOPT_FTP_CREATE_MISSING_DIRS可能有助于子目录,但如果我也想知道我是否错过了这一点,或者这会有任何严重的缺点。 主要问题是:如何保持连接“开放”? 重新连接每个文件可能意味着额外的不必要的开销。 理想情况下,我想继续使用简单的界面。 但是如果在这种情况下另一个接口提供更好的支持,我将使用它。 CURLcode ret; CURL *handle = curl_easy_init(); /* Connect to FTP server using * * the given username and password */ for ({each file}) { curl_easy_setopt(handle, …, …); … ret = curl_easy_perform(handle); /* Analyse return code */ curl_easy_reset(handle); } /* Disconnect from server */ curl_easy_clenup(handle);

使用HTTP身份validation与C中的libcurl进行Twitter流式传输

可能重复: 尝试使用C访问Twitter Streaming API 我不确定我的代码中出了什么问题,但似乎validation方面存在问题。 每次执行代码时都没有输出。 我的目标是希望从Twitter API接收推文流。 问题可能是其他问题。 但我不确定。 请帮忙。 这是C代码: #include #include #include #include struct string { char *ptr; size_t len; }; void init_string(struct string *s) { s->len = 0; s->ptr = malloc(s->len+1); if (s->ptr == NULL) { fprintf(stderr, “malloc() failed\n”); exit(EXIT_FAILURE); } s->ptr[0] = ‘\0’; } size_t writefunc(void *ptr, size_t size, size_t […]

libcurl HTTPS POST数据发送?

我有通过HTTP POST请求接收数据的应用程序。 我正在尝试使用libcurl打开对此应用程序的请求,发送数据并从应用程序接收回复。 这是我到目前为止的代码: int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { const int timeout = 30000; char outputmessage[]=”VGhpcyBpcyBqdXN0IGEgbWVzc2FnZSwgaXQncyBub3QgdGhlIHJlYWwgdGhpbmc=”; curl_easy_setopt(curl, CURLOPT_URL, “https://somehost.com/someapp”); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_USERAGENT, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.5”); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, outputmessage); curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(outputmessage)); curl_easy_setopt(curl, […]

realloc():下一个大小无效

我遇到了realloc函数的问题。 我只使用C(所以没有矢量)和LibCurl。 我遇到的问题是我在write_data函数的第12次迭代中得到以下错误(realloc():无效的下一个大小)(我将函数传递给Curl作为回调,每次libcurl都调用它时一些要传回的数据(数据以块的forms传递))。 跟踪: -Removed- 资源: #include #include #include #include char * Data; //stores the data size_t RunningSize; int write_data( char *ptr, size_t size, size_t nmemb, void *stream ) { size_t ThisSize = (size * nmemb); //Stores the size of the data to be stored size_t DataLen = strlen( Data ); //length of the data […]

libcurl在上传数据之前延迟1秒,命令行curl不会

我正在使用libcurl向本地服务发送API命令(即在127.0.0.1上)。 该程序旨在替换shell脚本(使用curl程序。) 一切都在工作,除了在某处有1秒的延迟,即从我调用curl_easy_perform()到第一次调用我的读回调函数的时间curl_easy_perform() 1秒。 C程序正在使用这些选项(省略错误检查和回调代码): curl_easy_setopt(curl, CURLOPT_URL, “http://127.0.0.1:12345/x”); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1); curl_easy_setopt(curl, CURLOPT_INFILESIZE, (long)getLengthOfCommandObject()); curl_easy_setopt(curl, CURLOPT_READFUNCTION, &myReadFunction); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &myWriteFunction); 但是如果我像这样从shell运行curl : $ curl –data-binary ” http://127.0.0.1:12345/x 它会立即发送请求,而不会受到1秒延迟的影响。 可能导致延迟的原因是什么,我可以设置一个防止它的选项吗? 编辑服务器基于mongoose