2016-07-15 6 views
0

私はRで〜40000文字でオンザフライで生成されるURIを構築しています。RのURLの最大長はどれくらいですか?

私は経由の接続時にすべての3つはbad URLエラーを与える

  • RCurl

  • jsonlite

  • curl

を使用してみましたa HTTP GET request。私はhttrを使用することを控えています。私は自分のRプログラムに最小限の依存性を持たせるために、さらに5つのdependenciesをインストールします。 httrでもURLの文字数が非常に多くなることは確かです。

許可された制限、またはURLの長さのPythonのurllibに似たより良いアプローチ/パッケージにエンコード/パックする方法はありますか?

ありがとうございます。

+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-length-of-get-request-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を作成し、それを試してみましょう:

-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の代わりにデータ交換のためにバイナリ形式を使用するという2つの考えがあります。どうもありがとうございます。ヘルプをよろしくお願いいたします。 – user6591903

関連する問題