#r #curl #proxy #quantmod
Вопрос:
Я видел много вопросов по curl
проблеме тайм-аута. Однако я все еще в замешательстве по поводу своего дела.
Моя проблема возникла, когда я использовал quantmod::getSymbols
. Каждое испытание заканчивалось
Warning message:
x = 'AAPL', get = 'stock.prices': Error in curl::curl_fetch_memory(cu, handle = h): Timeout was reached: [finance.yahoo.com] Operation timed out after 10008 milliseconds with 0 out of 0 bytes received
Обратите внимание, что я использую прокси-сервер. Я пытался включать и выключать прокси-сервер или запускать
httr::set_config(httr::use_proxy(
"127.0.0.1:xxxxxx", port = 8080,
username = "xxxx", password = "****"
), override = TRUE)
Однако ничего не работает.
После того, как я запутался во quantmod
внутренних деталях, я решил поэкспериментировать в чистом curl_fetch_memory
виде .
- пример в
curl_fetch_memory
документе нормально работает на моем компьютере
curl::curl_fetch_memory("http://httpbin.org/cookies/set?foo=123amp;bar=ftw")
curl_fetch_memory
не работает"https://finance.yahoo.com/"
(Обратите внимание, что я не могу получить доступ к веб-сайту в веб-браузере без моего прокси)- Следующие коды могут успешно извлекать результаты из https://finance.yahoo.com/:
curl_opts <- list(
ssl_verifypeer = 0L,
proxyuserpwd = "xxxx:****",
proxyauth = as.integer(15),
proxy = "127.0.0.1:xxxxxx",
proxyport = 8080
)
cookie_handler <- curl::new_handle()
curl::handle_setopt(handle=cookie_handler, .list=curl_opts)
curl::curl_fetch_memory("https://finance.yahoo.com/",
handle = cookie_handler)
Похоже, что quantmod
не удается правильно использовать настройки прокси-сервера. Однако нет возможности установить прокси-сервер внутри функций из пакета. Как я могу решить свою проблему?
Система:
R version 4.1.1 (2021-08-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19043)
Matrix products: default
locale:
[1] LC_COLLATE=Chinese (Simplified)_China.936
[2] LC_CTYPE=Chinese (Simplified)_China.936
[3] LC_MONETARY=Chinese (Simplified)_China.936
[4] LC_NUMERIC=C
[5] LC_TIME=Chinese (Simplified)_China.936
# ...
Ответ №1:
Я думаю, что нашел решение. Все, что вам нужно, это включить прокси-сервер и запустить
Sys.setenv(ALL_PROXY = "YOUR_PROXY_HOST")
до запроса.
Однако в настоящее время я все еще понятия не имею, как curl
используется эта настройка ALL_PROXY
. Я был бы признателен, если бы кто-нибудь мог дать этому объяснение.