2016-07-15 9 views
0

~ 40000 문자로 즉석에서 생성되는 URI를 R로 구성 중입니다.R에있는 URL의 최대 길이는 얼마입니까?

나는 통해 연결할 때 세 가지가 bad URL 오류를 줄

  • RCurl

  • jsonlite

  • curl

를 사용하여 시도 a HTTP GET request. 나는 httr을 사용하는 것을 자제하고 있기 때문에, 내 R 프로그램에 최소한의 의존성을 가지기를 원할 때, 추가로 dependencies을 5 개 설치할 것이다. httr이라도 URL에 너무 많은 문자를 처리 할 수 ​​있는지 확신 할 수 없습니다.

파이썬의 urllib과 비슷한 길이 인 URL을 처리 할 수있는 허용 된 한도 또는 더 나은 접근 방식/패키지로 인코딩/포장 할 수있는 방법이 있습니까?

미리 감사드립니다.

+0

약 2,000 자 정도의 답변이 최대 인 것처럼 보입니다. 다음 관련 질문을 참조하십시오. http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers, http://stackoverflow.com/questions/2659952/최대 길이의 http-get-request. – Dave2e

+0

'jsonlite :: fromJSON'을 보면'txt' (여러분의 경우 URL)가'<1000 바이트''(['jsonlite :: fromJSON' 소스 코드) (https : // gitub.com/jeroenooms/jsonlite/blob/master/R/fromJSON.R)) – SymbolixAU

+0

그래서이'GET' 요청을'POST' 요청으로 변환하는 것 이외에 R을 통해 긴 URL에 접근 할 수있는 방법이없는 것입니다. 나는'HTTP' 프로토콜의 모든 목적을 무너 뜨리는 것이라고 생각한다. – user6591903

답변

4

이것은 RCurl의 제한 사항이 아닙니다.

이의 긴 URL을하고 그것을 시도하자

A-Z의 52000 개 문자의
> s = paste0(rep(letters,2000),collapse="") 
> nchar(s) 
[1] 52000 

. 의 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이 40,000 자 이상의 URL을 요청할 수 있음을 확인했습니다.

우리가 더 많이 알기 전까지는 우리가 알지 못하는 서버로부터 오는 "잘못된 URL"메시지 만 추정 할 수 있습니다.

+0

오류는 매번 생성되는 새 줄로 인해 발생했습니다. 또한'rjson :: fromJSON'을 사용하여 RCurl'JSON' 응답을 구문 분석했습니다. 이것은'jsonlite :: fromJSON'에 비해 더 큰 데이터의 경우 훨씬 더 빠릅니다. JSON 대신 데이터 교환을 위해 바이너리 형식을 사용하는 것은 아직 두 가지입니다. 정말 고맙습니다. 도움을 감사하십시오. – user6591903

관련 문제