2016-07-15 82 views
0

我正在構建一個R中的URI,它是隨機生成的,大約有40000個字符。R中URL的最大長度是多少?

我嘗試使用

  • RCurl

  • jsonlite

  • curl

所有這三個提供一個bad URL錯誤連接時,通過一個HTTP GET request。我禁止使用httr,因爲它會安裝5個額外的dependencies,而我希望在我的R程序中具有最小的依賴性。我不確定是否即使httr能夠處理URL中的這麼多字符。

有沒有一種方法可以將它編碼/打包到允許的限制或更好的方法/包中,它可以處理類似於Python的urllib的任何長度的URL

在此先感謝。

+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' source code](https:// github.com/jeroenooms/jsonlite/blob/master/R/fromJSON.R)) – SymbolixAU

+0

那麼,除了將這個'GET'請求轉換爲'POST'請求​​之外,是否還有辦法通過R訪問長URL?我認爲'HTTP'協議的全部目的是失敗的? – user6591903

回答

4

這不是RCurl的限制。

讓我們做一個長的URL和嘗試:

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

這是A-Z的52000個字符。它貼在一個網址:

> 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可以請求超過40,000個字符的URL。

直到我們知道更多,我只能假設「壞URL」消息來自服務器,我們什麼都不知道。

+0

錯誤是由於每次都會生成新行。我還用'rjson :: fromJSON'來解析RCurl'JSON'迴應。與'jsonlite :: fromJSON'相比,這對於更大的數據要快得多。儘管如此,我仍然想用二進制格式來代替JSON來進行數據交換。非常感謝。感謝幫助。 – user6591903

相關問題