gem [Ruby] подключается через webproxy [windows] - PullRequest
0 голосов
/ 03 января 2011

Я задаю этот извечный вопрос о том, как пройти через ваш прокси при использовании ruby ​​gem.

Я попытался установить переменную env HTTP_PROXY:

HTTP_PROXY=myusername:password@proxy.com:8080

но это не работает.

> gem install rails
ERROR:  While executing gem ... (URI::InvalidURIError)
    bad URI(is not URI?): http://myusername:password@proxy.com: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

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 января 2011

Исправлен прокси 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 голосов
/ 03 января 2011

Прокси-серверы, особенно аутентифицирующие прокси-серверы, могут использовать универсальный ключ во всех видах служб автоматического обновления. К сожалению, gem неправильно обрабатывает переменную окружения HTTP_PROXY. Короче говоря, он не знает, что делать с ответом BasicAuthentication от сервера, даже если он пытается.

Короче говоря, вам придется настроить локальный прокси-сервер, который позаботится о навигации по прокси. Он не может делать ничего, что выполняет какие-либо преобразования (например, распаковка сжатого потока).

Конструкция myusername:password@company.com:8080 не является допустимым URL-адресом. Я знаю, что это ярлык для проверки подлинности Windows прокси-серверов, но только часть после символа @ является действительным URL.

Проверьте этот FAQ: http://docs.rubygems.org/read/chapter/15

Проблема достаточно распространена.

...