2016-07-15 2 views
0

Я создаю URI в R, который генерируется «на лету» с ~ 40000 символами.Какова максимальная длина URL-адреса в R?

Я попытался с помощью

  • RCurl

  • jsonlite

  • curl

Все три дают bad URL Ошибка при подключении через a HTTP GET request. Я воздерживаюсь от использования httr, поскольку он установит 5 дополнительных dependencies, в то время как я хочу минимальную зависимость в моей программе R. Я не уверен, что даже httr сможет обрабатывать столько символов в URL-адресе.

Есть ли способ, которым я могу кодировать/упаковывать его в разрешенный лимит или лучший подход/пакет, который может обрабатывать URL любой длины, подобной urllib python?

Заранее спасибо.

+0

Из этих ответов около 2000 символов кажется максимальным. См. Следующие вопросы: http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers, http://stackoverflow.com/questions/2659952/максимальная длина из-HTTP-GET-запроса. – Dave2e

+0

глядя на 'jsonlite :: fromJSON', вы видите, что' txt' (который в вашем случае является URL-адресом) составляет '<1000" байтов "' (['jsonlite :: fromJSON' исходный код] (https: // github.com/jeroenooms/jsonlite/blob/master/R/fromJSON.R)) – SymbolixAU

+0

Итак, не могу ли я получить доступ к длинным URL-адресам через R, кроме преобразования этого запроса «GET» в запрос «POST», который Я думаю, что побеждает всю цель протокола HTTP? – user6591903

ответ

4

Это не является ограничением RCurl.

Давайте сделать длинный URL и попробовать:

> s = paste0(rep(letters,2000),collapse="") 
> nchar(s) 
[1] 52000 

Это 52000 символов A-Z. Жми на URL:

> url = paste0("http://www.omegahat.net/RCurl/",s,sep="") 
> nchar(url) 
[1] 52030 
> substr(url, 1, 40) 
[1] "http://www.omegahat.net/RCurl/abcdefghij" 

Теперь попробуйте и получить его:

> txt = getURL(url) 
> txt 
[1] "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>414 Request-URI Too Large</title>\n</head><body>\n<h1>Request-URI Too Large</h1>\n<p>The requested URL's length exceeds the capacity\nlimit for this server.<br />\n</p>\n</body></html>\n" 
> 

Это правильный ответ от сервера. Сервер решил, что это длинный URL-адрес, возвратил ошибку 414 и доказывает, что RCURL может запрашивать URL-адреса более 40 000 символов.

До тех пор, пока мы не узнаем больше, я могу только предположить, что сообщение «плохой URL» поступает с сервера, о котором мы ничего не знаем.

+0

Ошибка произошла из-за создания новой строки каждый раз. Также я использовал 'rjson :: fromJSON' для анализа ответа RCurl' JSON'. Это было намного быстрее для больших данных по сравнению с jsonlite :: fromJSON. Тем не менее я в двух умах, чтобы использовать двоичный формат для обмена данными вместо JSON. Огромное спасибо. Цените помощь. – user6591903

Смежные вопросы