Я просто ответил на аналогичный вопрос: https://stackoverflow.com/a/43501438/206820
Если вы просто не просто хотите открыть URL-адрес, но также хотите загрузить ресурс (скажем, файл PDF), вы можете использовать код, как показано ниже:
# proxy = ProxyHandler({'http': 'http://192.168.1.31:8888'})
proxy = ProxyHandler({})
opener = build_opener(proxy)
opener.addheaders = [('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30')]
install_opener(opener)
result = urlretrieve(url=file_url, filename=file_name)
Причина, по которой я добавил прокси, - отслеживать трафик в Чарльзе, и вот трафика я получил:
Я не уверен, почему вы не хотите изменять execute
, но, на мой взгляд, лучшим вариантом будет использование его для использования отдельного параметра шаблона для вызываемого объекта.
Это дает дополнительное преимущество, которое вы можете передать любому вызываемому элементу, например лямбде, или std::function
, или функтору.
Добавление идеальной пересылки - еще одна хорошая идея. Вызываемый объект, возможно, может быть переадресован так, чтобы быть как можно более общим.
#include <utility>
template<typename F, typename ...Args>
void execute(F fun, Args&& ...args) {
fun(std::forward<Args>(args)...);
}
Если сигнатура функции важна, и поэтому вы не хотите изменять execute
, есть способы извлечь ее из F
с помощью признаков типа.