lampa
lampa copied to clipboard
Ошибка при использовании прокси на TMDB
Настроил свой прокси для запросов к TMDB. Но запрос на прокси отправляется некорректный. Пример из логов сквида 1660486075.570 0 333.222.111.000 TAG_NONE/400 3987 GET /http://image.tmdb.org/t/p/w200//o9xtEAlNb0wWql0EnT2SmaLZ1qa.jpg - HIER_NONE/- text/html
Как я понимаю тут линий "/" перед http.
Есть такое, я рассчитывал что прокси будет в виде домена, например: http://domain.com + /http://image.tmdb.org/t/p/w200//o9xtEAlNb0wWql0EnT2SmaLZ1qa.jpg
Если у вас свой адрес, по типа http://domain.com/image.php?url= то вам придется обрезать лишний слеш впереди.
Нет у меня стандартный Squid. Обрезать там что либо не получится.
Окей, тогда пример адреса, может можно будет проверить.
Не совсем понял: пример какого адреса? У меня Squid поднят на http://proxy.domain.ru:3128 В настройках вбиваю этот адрес, запрос приходит, но впереди адреса стоит "/", на него мой Squid и ругается.
Ну по правилам веба, после домена ставится слеш, а иначе адрес будет неверный. Но вот адрес с портом я не думал что так можно)) Разве оно так будет работать? http://proxy.domain.ru:3128http://image.tmdb.org/t/p/w200//o9xtEAlNb0wWql0EnT2SmaLZ1qa.jpg
Тут речь-то не совсем про веб :) Тут ведь отправляется запрос к прокси серверу. Кроме того, у кого в качестве прокси стоит какой-нибудь http-сервер может в настройках добавить завершающий слеш.
Полноценный socket5 или другой протокол в лампе не работает. Только веб протокол, поэтому слеш обязательно.
Нет, никаких соксов, обычный прокси-сервер. Обычный GET запрос. Примерно так я себе представляю: const http = require("http");
const options = { host: "proxy", port: 8080, path: "http://www.google.com", headers: { Host: "www.google.com" } };
http.get(options, (res) => { console.log(res); res.pipe(process.stdout); });
Ну и как по вашему я заведу node,js в браузере? Повторюсь, доступен только javascript метод и только по типу http://proxy.domain.ru:3128/http://image.tmdb.org/t/p/w200//o9xtEAlNb0wWql0EnT2SmaLZ1qa.jpg
А что с вариантом описанным мною выше? Ведущий "/" добавляется уже в скрипте. Что если сделать для обычных прокси в настройках "http://proxy.domain.ru:3128", а для тех кому нужен этот "/" дописать его в настройках "http://proxy.somian.ru/". От Лампы я получаю корректный GET запрос, мешает его отработать только "/" перед http... Можно увидеть кусок кода, где формируется запрос к прокси?
Ну и как по вашему я заведу node,js в браузере? Повторюсь, доступен только javascript метод и только по типу http://proxy.domain.ru:3128/http://image.tmdb.org/t/p/w200//o9xtEAlNb0wWql0EnT2SmaLZ1qa.jpg
А если убрать слешь вот тут ) + '/' + base : base;
Думаю это и есть решение, а тем кому надо будут прописывать его вручную
Думаю это и есть решение, а тем кому надо будут прописывать его вручную
Тупость никто не отменял)) Так и будут писать, прописал домен, а не чего не работает.
Ведущий "/" добавляется уже в скрипте.
Так устроены сервера, впереди всегда есть слеш.
Что если сделать для обычных прокси в настройках "http://proxy.domain.ru:3128"
Вы на своем сервере хоть пробовали запустить без слеша?
Вы на своем сервере хоть пробовали запустить без слеша?
Не понял вопрос. Что запустить на своём сервере?
Не понял вопрос. Что запустить на своём сервере?
Где стоит прокси сервер? Как к нему обратится? По какому адресу?
По какому адресу?
Как-то не хотелось бы светить свой прокси в отрытых источниках. А кусочек лога приводил в первом сообщении.
Вот пример как должен работать прокси сервер: http://imagetmdb.cub.watch/http://image.tmdb.org/t/p/w200//1dCTKq9FkwO58EbcOdpZy1sYw71.jpg
А теперь представим, что мы не будем подставлять слеш, пробуем: http://imagetmdb.cub.watchhttp://image.tmdb.org/t/p/w200//1dCTKq9FkwO58EbcOdpZy1sYw71.jpg
Других вариантов нету и не будет.
Хорошо, я понял. Придётся поднимать nginx и настраивать его на работу в качестве прокси, вместо того чтобы использовать стандартный Squid.
Спасибо!
Не я тут диктую условия)) Диктует их javascript, а в javascript нету технических способов использовать прокси с логином и паролем, кроме как запрашивать тупо адрес и подставлять ему параметры другого адреса.
Я крайне слабо ориентируюсь в JS, но почему-то был уверен, что есть какой-то класс alaProxy, которому можно передать адрес прокси и строку адреса. Очевидно я ошибался. Придётся огород городить :)
Не я тут диктую условия)) Диктует их javascript, а в javascript нету технических способов использовать прокси с логином и паролем, кроме как запрашивать тупо адрес и подставлять ему параметры другого адреса.
вроде что то подобие нашёл: на гитхабе пример из stackoverflow
Других вариантов нету и не будет.
Я правильно понимаю, что вы свою версию прокси сделали с использованием PHP?
Да. Если надо, могу скинуть.
Да. Если надо, могу скинуть.
Да, было бы интересно посмотреть. Если напрямую с nginx не получится...
index.php
<?php
header('Access-Control-Allow-Origin: *');
@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( "short_open_tag", 1 );
$uri = substr($_SERVER['REQUEST_URI'], 1);
$exp = explode('/', $uri);
$med = array_shift($exp);
$url = implode('/', $exp);
if($med == 'api'){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT,60);
$html = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($code == 200){
header("HTTP/1.1 200 OK");
echo $html;
}
else{
header("HTTP/1.0 404 Not Found");
}
}
elseif($med == 'img'){
echo file_get_contents($url);
}
else{
header("HTTP/1.0 404 Not Found");
}
?>
.htaccess
DirectoryIndex index.php
RewriteEngine On
RewriteBase /
ErrorDocument 404 /index.php
ErrorDocument 403 /index.php
RewriteCond %{REQUEST_FILENAME} !(index\.php)
RewriteRule ^(.*)$ /index.php/$1
Пример изображений: http://domain.com/img/http://imagetmdb.cub.watch/http://image.tmdb.org/t/p/w200//1dCTKq9FkwO58EbcOdpZy1sYw71.jpg
Пример api http://domain.com/api/http://api.themoviedb.org/3/movie/top_rated?api_key=4ef0d7355d9ffb5151e987764708ce96&language=ru
Вариант, конечно, интересный, с таким доступом к прокси, но сомнительный. Я поднял свой локальный прокси и VPN в network namespaces и жутко обломался. То, что нигде не написано, что данный прокси далек от всем привычного вводит людей в заблуждение. Этот нюанс же нигде не описан.
Я правильно понимаю, что ваш вариант на PHP требует запуска Apache или Nginx? Хотелось бы поподробнее узнать о том, как это все запустить.
P.S. Пытался отредактировать URL при помощи url_rewrite_program в squid и могу сказать, что не стоит на это тратить время. Судя по всему проверка URL происходит раньше, чем перенаправление.
Я правильно понимаю, что ваш вариант на PHP требует запуска Apache или Nginx?
Да, для использования приведённого выше прокси-скрипта надо поднимать http-сервер. Я на своём VDS поднял Апач. Чутка доработал скрипт и использую его.
Подскажите если стоит nginx на впс но в директории html уже есть сайт, куда можно скинуть для прокси ваши файлы .htaccess index.php. Я так понимаю можно в корне создать папку и сбросить туда эти файлы. Тогда путь будет http://домен/папка/