2011-01-03 24 views
0

ruby​​ gemを使用する際に、プロキシをどのように通過するのか、この古くから質問しています。gem [ruby] webproxyを経由して接続する[windows]

私はENV変数HTTP_PROXY設定しようとした:

HTTP_PROXY=myusername:[email protected]:8080 

が、これは動作しませんが。

> gem install rails 
ERROR: While executing gem ... (URI::InvalidURIError) 
    bad URI(is not URI?): http://myusername:[email protected]:8080 

私は開始時tcp://を追加使用してみましたが、それはエラーメッセージでhttp://tcp://を示しているので、私はそれがあまりにも間違っていたと仮定する。

だから、私は自動でこのコードを使用してPHP経由で接続しようとした:

<?php 
$path = 'http://rubygems.org/'; 

$auth = base64_encode('myusername:password'); 

file_put_contents('proxy.log', 'POST::', FILE_APPEND); 
file_put_contents('proxy.log', print_r($_POST, true), FILE_APPEND); 
file_put_contents('proxy.log', 'GET::', FILE_APPEND); 
file_put_contents('proxy.log', print_r($_GET, true), FILE_APPEND); 

$aContext = array(
    'http' => array(
     'method' => 'GET', 
     'content' => http_build_query($_GET), 
     'proxy' => 'tcp://proxy.com:8080', 
     'request_fulluri' => true, 
     'header' => "Proxy-Authorization: Basic $auth" 
    ) 
); 
$cxContext = stream_context_create($aContext); 

$sFile = file_get_contents($path, false, $cxContext); 

header('Content-type: application/gzip'); 
echo $sFile; 

をし、特定のファイルを取得しようとしている包み、私は、Apacheを使用して、それを処理していました。

.htaccess 

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} -d 
    RewriteRule ^(.*[^/])$ http://%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L] 

    RewriteCond $1 !^$ 
    RewriteCond $1 !^(index\.php) 
    RewriteRule ^(.*)$ index.php?$1 [QSA,L] 
</IfModule> 
# Options -Indexes 

でも、このエラーが発生します。

> gem sources -ahttp://mylocalhost/ror-proxy/ 
ERROR: While executing gem ... (Zlib::GzipFile::Error) 
not in gzip format 

+0

HTTP_PROXYには完全なHTTP URLが必要です。 'HTTP_PROXY = http:// myusername:password @ proxyを試してみてください。com:8080' –

答えて

0

現在、PHPプロキシが修正されました。

新しいソース宝石を追加すること_ことが.(ドット)を表すこと

specs_4_8_gz

通知を送出します。それを元に戻すだけです。これは一度だけ行われることに注意してください。他の宝石は適切なファイル名として発送されます。

は次のようになります。

if (empty($_GET['_p'])) { 
    header('Content-type: text/html'); 
} else { 
    header('Content-type: application/gzip'); 

    $item = $_GET['_p']; 
    $item = '.gz' == substr($item, -3) ? $item: str_replace('_', '.', $item); 
    header('Content-Disposition: filename="' . $item . '"'); 
    $path .= $item; 
} 

私の完全なスクリプトはgithubに掲載されます。

0

プロキシサーバー、特に認証プロキシサーバーは、あらゆる種類の自動更新サービスでサルレンチを投げることができます。残念ながらgemは環境変数HTTP_PROXYを適切に処理しません。簡単に言えば、サーバからのBasicAuthenticationレスポンスをどのように扱うかはわかりませんが、試行しています。

簡単に言えば、プロキシを介してナビゲートするローカルのプロキシサーバーを設定する必要があります。それは、(圧縮されたストリームの解凍のような)あらゆる変換を行うことはできません。

myusername:[email protected]:8080構造体は有効なURLではありません。私はそれがプロキシサーバーを認証するウィンドウのショートカットだが、@シンボルの後の部分だけが有効なURLであることを知っている。

は、このFAQをチェックアウト:http://docs.rubygems.org/read/chapter/15

問題は十分に一般的です。

+0

軽微な訂正:Gemは基本認証を行いますが、あなたのFAQの参考文献によると、NTLM認証は行いません。あなたの答えは –

+0

に感謝します。以前はその文書を実際に読んでいました。 #apserverは、その文書の示唆であったが、今や死んでいるようだ。他の選択肢はありますか? – sheeks06

関連する問題