Как я могу использовать set_config с httr для маршрутизации запросов через прокси в R? - PullRequest
3 голосов
/ 16 апреля 2019

Я пытаюсь создать веб-скребок, который использует прокси, потому что его повторное поведение на большом веб-сайте приводило к бану IP. Однако я сталкиваюсь с проблемами, поскольку установка прокси-сервера с помощью описанного ниже метода не обходит запрет.

[РЕДАКТИРОВАТЬ: В связи с замечаниями комментатора ниже, я должен уточнить, что я не нарушаю заявленные условия обслуживания сайта, по крайней мере, я не могу найти. К сожалению, я думаю, что повторяющееся поведение выглядит подозрительно и, вероятно, было вовлечено в процесс автоопределения, предназначенный для отсеивания злонамеренных актеров.]

Я искал способ проверить, что моя функция на самом деле использует IP-конвейер, через который я пытаюсь его отправить, но я не могу найти никакой информации о проверке существующего IP, используемого конкретно в среде R.

Я очень новичок в изучении веб-страниц в целом и R в частности, поэтому я очень благодарен за любую помощь, которую вы можете оказать, особенно изложенную в максимально возможной степени.

Я пытался использовать ...

Sys.getenv("http_proxy")

... но это, кажется, отличается от того, что я ищу, так как он проверяет настройки IP в масштабе всей системы и не распознает набор прокси с помощью set_config ().

Я также попытался установить подробный вывод, чтобы посмотреть, как веб-сайт просматривает входящий запрос ...

set_config(verbose())

... но я либо не вижу, либо неправильно понимаю информацию, которая мне нужна.

Ниже приведен некоторый воспроизводимый код, хотя, если у вас нет возможности протестировать его на веб-сайте, с которого заблокирован ваш IP, вы не сможете точно воспроизвести мою проблему.

Обязательные библиотеки:

library(httr)

Прокси и связанные порты из https://free -proxy-list.net /

proxies_b <- c("212.129.52.155", #anon, https
               "180.183.128.204", #anon, https
               "51.15.103.214") #anon, https
ports_b <- c(8080, 
             8213, 
             3128)

set_config(use_proxy(proxies_b[1], 
                     port = ports_b[1], 
                     username = NULL, password = NULL, 
                     auth = "basic"))

Пример функции:

url_works <- function(url){
  tryCatch({
    # Returns logical based on status code.
      identical(status_code(HEAD(url)),200L) 
    }, 
    error = function(e){
      print(paste0("The URL \'", url, "\' returned: ", e))
      return(FALSE) # Returns FALSE if an error
    })
}

Проверка функции:

url_works("https://www.google.com") # Should return TRUE
url_works("https://www.googlebug.com/") # Should return FALSE

Для ясности, эта функция работает. Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю его из-за заблокированного IP-адреса, настройка прокси-сервера не имеет никакого эффекта. Я не могу найти функцию для отладки почему. Так что я больше всего надеюсь ответить:

  1. Существует ли такая функция, которая будет проверять активный прокси в среде R, как установлено в set_config?

  2. Есть ли какие-либо причины, по которым вы можете понять, почему установка прокси-сервера таким образом не обойдет запрет IP?

  3. Действительно ли httr в этой функции даже отправляет свои запросы через прокси или все еще проходит через мой обычный IP?

Опять же, я новичок в этом, поэтому ваше терпение ценится!

...