- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对不起我的英语不好。我正在尝试运行以下代码,但是当进度运行大约一天或几个小时时它会崩溃,所以这次崩溃是偶然出现的。顺便说一句,SecMonitor_Curl 是一个单一的类,因此 curl_global_init() 只运行一次全局。我无法解决这个问题,所以我不知道我的程序有什么问题。请帮我。谢谢!
SecMonitor_Curl::SecMonitor_Curl()
{
curl_global_init(CURL_GLOBAL_ALL);
}
SecMonitor_Curl::~SecMonitor_Curl()
{
curl_global_cleanup();
}
static size_t write_to_string(void *ptr, size_t size, size_t nmemb, void *stream) {
((std::string*)stream)->append((char*)ptr, 0, size*nmemb);
return size * nmemb;
}
int SecMonitor_Curl::http_get(const std::string url, const std::string method, const std::map<std::string, std::string>& params, std::string post_data, std::string& response)
{
int ret = 0;
CURLcode res;
curl_ = curl_easy_init();
if (curl_ == NULL)
{
return -1;
}
if(curl_)
{
url_t = "www.google.com";
method = "POST";
post_body="{"test":"test"}";
res = curl_easy_setopt(curl_, CURLOPT_URL, url_t.c_str());
if (method == "POST" || method == "PUT" || method == "DELETE")
{
curl_easy_setopt(curl_, CURLOPT_CUSTOMREQUEST, method.c_str());
curl_easy_setopt(curl_, CURLOPT_POSTFIELDS, post_body.c_str());
curl_easy_setopt(curl_, CURLOPT_POSTFIELDSIZE, post_body.size());
}
res = curl_easy_setopt(curl_, CURLOPT_FOLLOWLOCATION, 1L);
res = curl_easy_setopt(curl_, CURLOPT_NOSIGNAL, 1L);
res = curl_easy_setopt(curl_, CURLOPT_ACCEPT_ENCODING, "deflate");
std::string out;
res = curl_easy_setopt(curl_, CURLOPT_WRITEFUNCTION, write_to_string);
res = curl_easy_setopt(curl_, CURLOPT_WRITEDATA, &out);
//printf("curl_version : %s ",curl_version());
res = curl_easy_perform(curl_);
/* Check for errors */
if (res != CURLE_OK) {
srlog_error("SecMonitor_Curl | curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
ret = -1;
}
response = out;
}
else
{
ret = -1;
}
curl_easy_cleanup(curl_);
return ret;
}
这是转储文件:
Program terminated with signal 11, Segmentation fault.
#0 _IO_fwrite (buf=0x7f16a31dba70, size=2, count=1, fp=0x0) at iofwrite.c:43
43 iofwrite.c: No such file or directory.
in iofwrite.c
(gdb) bt
#0 _IO_fwrite (buf=0x7f16a31dba70, size=2, count=1, fp=0x0) at iofwrite.c:43
#1 0x00007f16a31aef93 in ?? () from /usr/lib64/libcurl.so.4
#2 0x00007f16a31af0c0 in Curl_debug () from /usr/lib64/libcurl.so.4
#3 0x00007f16a31afd69 in Curl_infof () from /usr/lib64/libcurl.so.4
#4 0x00007f16a31b55f4 in Curl_protocol_connect () from /usr/lib64/libcurl.so.4
#5 0x00007f16a31bbb0c in Curl_connect () from /usr/lib64/libcurl.so.4
#6 0x00007f16a31c3a90 in Curl_perform () from /usr/lib64/libcurl.so.4
#7 0x0000000000437a10 in SecMonitor_Curl::http_get (this=0x11e2db8, url=
"http://dip.alibaba-inc.com/api/v2/services/schema/mock/61919?spm=a312q.7764190.0.0.40e80cf75fUogt", method="POST", params=std::map with 5 elements = {...}, post_data="", response="")
at /home/albert.yb/secMonitorAgent/secMonitor/monitor/server/SecMonitor/SecMonitor_Curl.cpp:131
#8 0x0000000000435ab0 in SecMonitor_Cmd::run_cmd (this=0x11eeef8, cmd_name="update")
SecMonitor_Curl.cpp:131 :表示 curl_easy_perform()。
谢谢
最佳答案
我收集了3个write_to_string回调函数:第一:
static size_t write_to_string(void *ptr, size_t size, size_t nmemb, void *stream) {
((std::string*)stream)->append((const char*)ptr, size*nmemb);
return size * nmemb;
}
第二个:
static size_t write_to_string(void *contents, size_t size, size_t nmemb, std::string *s)
{
size_t newLength = size*nmemb;
size_t oldLength = s->size();
try
{
s->resize(oldLength + newLength);
}
catch(std::bad_alloc &e)
{
//handle memory problem
return 0;
}
std::copy((char*)contents,(char*)contents+newLength,s->begin()+oldLength);
return size*nmemb;
}
第三:
struct MemoryStruct {
char *memory;
size_t size;
};
static size_t
write_to_string(void *contents, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
struct MemoryStruct *mem = (struct MemoryStruct *)userp;
mem->memory = realloc(mem->memory, mem->size + realsize + 1);
if(mem->memory == NULL) {
/* out of memory! */
printf("not enough memory (realloc returned NULL)\n");
return 0;
}
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;
return realsize;
}
这些回调方法可以处理将 curl 响应输出到 String 的事情。但是这里没有这个问题,都是crash,因为“crul_”是这个类的成员变量。当“http_get”函数被多线程引用时,一定会崩溃。
关于c++ - libcurl curl_easy_perform 崩溃(段错误)c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45097847/
我使用以下代码片段从远程 REST API 获取 43182 个字符长的 JSON: string result_; curl_easy_setopt(curlGET_, CURLOPT_TIMEOU
背景 我有 VS2015 C++ 项目,在所有 Windows >= XP 中运行,使用 libcurl处理客户请求。 问题 根据经验,服务器响应花费的时间太长,我的进程被阻塞了。 我想知道 curl
有没有一种方法可以取消 C++ 中的 curl_easy_perform?? 我有一个场景,我试图连接到离线的网络资源,curl_easy_perform 需要一定的时间才能返回 CURLE_COUL
如何隐藏 curl_easy_perform 输出(在 shell 中)? 这是关于 C 应用程序的。 最佳答案 在 curl_easy_setopt() 中使用 CURLOPT_NOBODY。示例:
我有以下问题:如何在 char * 缓冲区中写入通过 http-response 返回的数据?我发现了几种方法: 使用 CURLOPT_WRITEDATA 或 CURLOPT_WRITEFUNCTIO
我正在使用 curl 发送 POST 和 GET 请求,我使用回调函数从这些请求中获取回复。这些 callback 函数是静态成员函数,它们依次调用非静态成员函数(您不能在 curl 中直接使用非静态
使用带有 libcurl 库的 Qt5,我尝试从我的本地 FTP 服务器下载一个目录列表。如果我将所有 curl_easy_setopt() 和 curl_easy_perform() 保留在 mai
当我尝试对无法访问的服务器执行一些 HTTP_POST、HTTP_DELETE 操作时,返回代码有时为 -1。因为我的应用程序正在崩溃。 这是我的示例代码。 我的应用程序代码是用 C++ 编写的,我也
c使用libcurl curl_easy_perform post,空格和点替换为下划线 代码如下例所示。 另一边接收到的数据是错误的: 预期:data to send... 实际上:data_to_
详细的,我注意到输出: 第一次运行结束时: * Connection #0 to host www.example.com left intact 在第二次运行开始时: * Found bundle
当我在我的 c 程序中使用 curl_easy_perform 时,它以某种方式停止了我用于检查其他内容的计时器。 这是我的代码: curl_easy_setopt(curl, CURLOPT_URL
我在 libcurl 源代码树中找不到这个重要功能的源代码。我也没有在 curl.h 中找到此函数的定义。对 linux 内核 github 源代码的搜索和多个谷歌搜索都没有产生任何结果。 curl_
我写了这个简单的代码来检查网络连接或我们的 iOS 应用程序: int CL_Network::checkConnectionInt1(){ CURL *curl; CURLcode res;
我在使用 libcurl 时遇到了一些奇怪的问题 - 它拒绝解析特定的 URL,返回错误消息“无法解析主机名”。解决其他主机没有问题。我怀疑原因是失败的 URL 返回了 302 重定向,但我已经设置了
所以我在 C++ 中使用 libcurl 来检索页面中的数据,但由于某种原因,当我连接到我的 vps 时,它会在帖子标题中抛出错误。 vps 中的代码只是发出一个获取请求并从我的数据库中吐出一些数据。
我在尝试使用 libcurl 下载文件时遇到问题。该程序使用多个线程,每个需要下载文件的线程都会创建一个 libcurl 句柄来处理。 当 URL 正确时,一切正常,但如果 URL 中有错误,程序就会
对不起我的英语不好。我正在尝试运行以下代码,但是当进度运行大约一天或几个小时时它会崩溃,所以这次崩溃是偶然出现的。顺便说一句,SecMonitor_Curl 是一个单一的类,因此 curl_globa
我正在尝试使用 libcurl C++ 发出 REST/HTTP 请求。我注意到 curl_easy_perform block ,但如果我设置 CURLOPT_READFUNCTION 它不会。我只
我在我的 C++ 应用程序中使用 libcurl 7.26.0 通过 https 协议(protocol)与服务器通信。它工作正常,但在大约 20 分钟后连接失败:curl_easy_perform
在我为网站负载测试而编写的 HTTP flooder 中使用 libCURL 时,我遇到了段错误。 这里是相关代码:https://gist.github.com/AppleDash/a26e0ce0
我是一名优秀的程序员,十分优秀!