我编写了一个自由程序来从某个Web界面获取数据。 像这样的代码: 有时结构evhttp_request * req of self-> done为NULL。 我无法找到原因。
response->connecttime = spi_utils_float_time();
self->evreq = evhttp_request_new(self->done, task);
if (self->evreq == NULL) {
SPI_LOG_ERROR("spider", "cannot create evhttp_request");
goto download_error;
}
/* bson_print(&task->task); */
/** set header and body */
/* TODO: set timeout */
spi_http_request_split_header(self, self->header->str, self->evreq);
if (self->body != NULL)
evbuffer_add_printf(self->evreq->output_buffer, (const char*)self->body->str);
if (self->method == spi_http_post)
cmd_type = EVHTTP_REQ_POST;
self->evcon = evhttp_connection_new(self->host->str, self->port);
if (self->evcon == NULL) {
SPI_LOG_ERROR("spider", "evhttp_connection_new Failed!\n");
goto download_error;
}
SPI_LOG_DEBUG("spider", "set retries: %d.", 5);
evhttp_connection_set_retries(self->evcon, 3);
SPI_LOG_DEBUG("spider", "set timeout: %d.", 60);
evhttp_connection_set_timeout(self->evcon, 20);
response->connectedtime = spi_utils_float_time();
response->crawltime = spi_utils_float_time();
SPI_LOG_DEBUG("spider", "evhttp_make_request");
if (evhttp_make_request(self->evcon, self->evreq, cmd_type, self->path->str) == -1) {
SPI_LOG_ERROR("spider", "evhttp_make_request Failed.\n");
goto download_error;
}
答案 0 :(得分:0)
(从你的问题来看,你得到NULL
的地方并不完全清楚,但也许你的意思是这样的)
如果超时,传递给evhttp_request_new
的回调可能会NULL
。