libevent 支持 HTTP 重定向

Posted

技术标签:

【中文标题】libevent 支持 HTTP 重定向【英文标题】:libevent support HTTP redirect 【发布时间】:2014-03-29 17:30:00 【问题描述】:

我正在尝试使用 libevent 来模拟多个 HTTP 客户端。以下代码 sn-p 有效,但不幸的是它似乎不支持 HTTP 重定向(301、302)。想知道 libevent HTTP 包是否完全支持它,如果支持,我该如何启用它。

提前致谢。

void http_request_done(struct evhttp_request *req, void *arg)
    printf("http_request_done\n");


int http_req(char *uri, int i) 
    struct evhttp_connection *conn = evhttp_connection_base_new(base, NULL, host, port);
    struct evhttp_request *req = evhttp_request_new(http_request_done, base);
    req->cb_arg = (void*) i;
    evhttp_add_header(req->output_headers, "Host", "localhost");
    evhttp_add_header(req->output_headers, "Connection", "KeepAlive");
    evhttp_make_request(conn, req, EVHTTP_REQ_GET, uri);

【问题讨论】:

【参考方案1】:

最终在 http_request_done() 函数中手动完成:

void http_request_done(struct evhttp_request *req, void *arg)
    const char *url = evhttp_find_header(evhttp_request_get_input_headers(req), "Location");
    if (url) 
        quickHttpRequest(id, (char*) url);
        return;
    
    ...

【讨论】:

以上是关于libevent 支持 HTTP 重定向的主要内容,如果未能解决你的问题,请参考以下文章

关于网络请求302,重定向的问题

Nginx地址重定向使用

使用外部登录强制 HTTPS 重定向时出现 HTTP 500 错误

HTTP重定向

Spring Boot工程支持HTTP和HTTPS,HTTP重定向HTTPS

如何让Elastic Beanstalk nginx支持的代理服务器从HTTP自动重定向到HTTPS?