Forward request User-Agent for download instead of using internal one

Optimize performance.
This commit is contained in:
Tindy X committed 2020-08-08 22:50:22 +08:00
1 parent 2705b2a6f1
commit b705d84f84
2 files changed
+13 -11

No files matched your search

+2 -4
View File
@@ -104,11 +104,9 @@ static int curlGet(const FetchArgument argument, FetchResult &result)
if(argument.request_headers) if(argument.request_headers)
{ {
for(auto &x : *argument.request_headers) for(auto &x : *argument.request_headers)
{ list = curl_slist_append(list, (x.first + ": " + x.second).data());
if(toLower(x.first) != "user-agent")
list = curl_slist_append(list, (x.first + ": " + x.second).data());
}
} }
list = curl_slist_append(list, "SubConverter-Request: 1");
if(list) if(list)
curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, list); curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, list);
+11 -7
View File
@@ -32,7 +32,7 @@ struct responseRoute
std::vector<responseRoute> responses; std::vector<responseRoute> responses;
string_map redirect_map; string_map redirect_map;
const char *request_header_blacklist[] = {"host", "user-agent", "accept", "accept-encoding"}; const char *request_header_blacklist[] = {"host", "accept", "accept-encoding"};
static inline void buffer_cleanup(struct evbuffer *eb) static inline void buffer_cleanup(struct evbuffer *eb)
{ {
@@ -89,8 +89,8 @@ static inline int process_request(Request &request, Response &response, std::str
void OnReq(evhttp_request *req, void *args) void OnReq(evhttp_request *req, void *args)
{ {
const char *req_content_type = evhttp_find_header(req->input_headers, "Content-Type"), *req_ac_method = evhttp_find_header(req->input_headers, "Access-Control-Request-Method"); const char *req_content_type = evhttp_find_header(req->input_headers, "Content-Type"), *req_ac_method = evhttp_find_header(req->input_headers, "Access-Control-Request-Method");
const char *req_method = req_ac_method == NULL ? EVBUFFER_LENGTH(req->input_buffer) == 0 ? "GET" : "POST" : "OPTIONS", *uri = req->uri; const char *uri = req->uri, *internal_flag = evhttp_find_header(req->input_headers, "SubConverter-Request");
const char *user_agent = evhttp_find_header(req->input_headers, "User-Agent");
char *client_ip; char *client_ip;
u_short client_port; u_short client_port;
evhttp_connection_get_peer(evhttp_request_get_connection(req), &client_ip, &client_port); evhttp_connection_get_peer(evhttp_request_get_connection(req), &client_ip, &client_port);
@@ -99,7 +99,7 @@ void OnReq(evhttp_request *req, void *args)
int retVal; int retVal;
std::string postdata, content_type, return_data; std::string postdata, content_type, return_data;
if(user_agent != NULL && user_agent_str.compare(user_agent) == 0) if(internal_flag != NULL && strcmp(internal_flag, "1") == 0)
{ {
evhttp_send_error(req, 500, "Loop request detected!"); evhttp_send_error(req, 500, "Loop request detected!");
return; return;
@@ -118,7 +118,13 @@ void OnReq(evhttp_request *req, void *args)
Request request; Request request;
Response response; Response response;
request.method = req_method; switch(req->type)
{
case EVHTTP_REQ_GET: request.method = "GET"; break;
case EVHTTP_REQ_POST: request.method = "POST"; break;
case EVHTTP_REQ_OPTIONS: request.method = "OPTIONS"; break;
default: break;
}
request.url = uri; request.url = uri;
struct evkeyval* kv = req->input_headers->tqh_first; struct evkeyval* kv = req->input_headers->tqh_first;
@@ -128,8 +134,6 @@ void OnReq(evhttp_request *req, void *args)
request.headers.emplace(kv->key, kv->value); request.headers.emplace(kv->key, kv->value);
kv = kv->next.tqe_next; kv = kv->next.tqe_next;
} }
if(user_agent)
request.headers.emplace("X-User-Agent", user_agent);
request.headers.emplace("X-Client-IP", client_ip); request.headers.emplace("X-Client-IP", client_ip);
retVal = process_request(request, response, return_data); retVal = process_request(request, response, return_data);