lampa icon indicating copy to clipboard operation
lampa copied to clipboard

Ошибка при использовании прокси на TMDB

Open RealCoolmax opened this issue 2 years ago • 44 comments

Настроил свой прокси для запросов к 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.

RealCoolmax avatar Aug 14 '22 16:08 RealCoolmax

Есть такое, я рассчитывал что прокси будет в виде домена, например: http://domain.com + /http://image.tmdb.org/t/p/w200//o9xtEAlNb0wWql0EnT2SmaLZ1qa.jpg

Если у вас свой адрес, по типа http://domain.com/image.php?url= то вам придется обрезать лишний слеш впереди.

yumata avatar Aug 15 '22 17:08 yumata

Нет у меня стандартный Squid. Обрезать там что либо не получится.

RealCoolmax avatar Aug 15 '22 23:08 RealCoolmax

Окей, тогда пример адреса, может можно будет проверить.

yumata avatar Aug 16 '22 06:08 yumata

Не совсем понял: пример какого адреса? У меня Squid поднят на http://proxy.domain.ru:3128 В настройках вбиваю этот адрес, запрос приходит, но впереди адреса стоит "/", на него мой Squid и ругается.

RealCoolmax avatar Aug 16 '22 07:08 RealCoolmax

Ну по правилам веба, после домена ставится слеш, а иначе адрес будет неверный. Но вот адрес с портом я не думал что так можно)) Разве оно так будет работать? http://proxy.domain.ru:3128http://image.tmdb.org/t/p/w200//o9xtEAlNb0wWql0EnT2SmaLZ1qa.jpg

yumata avatar Aug 16 '22 07:08 yumata

Тут речь-то не совсем про веб :) Тут ведь отправляется запрос к прокси серверу. Кроме того, у кого в качестве прокси стоит какой-нибудь http-сервер может в настройках добавить завершающий слеш.

RealCoolmax avatar Aug 16 '22 07:08 RealCoolmax

Полноценный socket5 или другой протокол в лампе не работает. Только веб протокол, поэтому слеш обязательно.

yumata avatar Aug 16 '22 08:08 yumata

Нет, никаких соксов, обычный прокси-сервер. Обычный 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); });

RealCoolmax avatar Aug 16 '22 08:08 RealCoolmax

Ну и как по вашему я заведу node,js в браузере? Повторюсь, доступен только javascript метод и только по типу http://proxy.domain.ru:3128/http://image.tmdb.org/t/p/w200//o9xtEAlNb0wWql0EnT2SmaLZ1qa.jpg

yumata avatar Aug 16 '22 10:08 yumata

А что с вариантом описанным мною выше? Ведущий "/" добавляется уже в скрипте. Что если сделать для обычных прокси в настройках "http://proxy.domain.ru:3128", а для тех кому нужен этот "/" дописать его в настройках "http://proxy.somian.ru/". От Лампы я получаю корректный GET запрос, мешает его отработать только "/" перед http... Можно увидеть кусок кода, где формируется запрос к прокси?

RealCoolmax avatar Aug 16 '22 10:08 RealCoolmax

Ну и как по вашему я заведу node,js в браузере? Повторюсь, доступен только javascript метод и только по типу http://proxy.domain.ru:3128/http://image.tmdb.org/t/p/w200//o9xtEAlNb0wWql0EnT2SmaLZ1qa.jpg

А если убрать слешь вот тут ) + '/' + base : base; Думаю это и есть решение, а тем кому надо будут прописывать его вручную

totavok8 avatar Aug 16 '22 11:08 totavok8

Думаю это и есть решение, а тем кому надо будут прописывать его вручную

Тупость никто не отменял)) Так и будут писать, прописал домен, а не чего не работает.

Ведущий "/" добавляется уже в скрипте.

Так устроены сервера, впереди всегда есть слеш.

yumata avatar Aug 16 '22 11:08 yumata

Что если сделать для обычных прокси в настройках "http://proxy.domain.ru:3128"

Вы на своем сервере хоть пробовали запустить без слеша?

yumata avatar Aug 16 '22 11:08 yumata

Вы на своем сервере хоть пробовали запустить без слеша?

Не понял вопрос. Что запустить на своём сервере?

RealCoolmax avatar Aug 16 '22 11:08 RealCoolmax

Не понял вопрос. Что запустить на своём сервере?

Где стоит прокси сервер? Как к нему обратится? По какому адресу?

yumata avatar Aug 16 '22 11:08 yumata

По какому адресу?

Как-то не хотелось бы светить свой прокси в отрытых источниках. А кусочек лога приводил в первом сообщении.

RealCoolmax avatar Aug 16 '22 11:08 RealCoolmax

Вот пример как должен работать прокси сервер: 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

Других вариантов нету и не будет.

yumata avatar Aug 16 '22 12:08 yumata

Хорошо, я понял. Придётся поднимать nginx и настраивать его на работу в качестве прокси, вместо того чтобы использовать стандартный Squid.

Спасибо!

RealCoolmax avatar Aug 16 '22 12:08 RealCoolmax

Не я тут диктую условия)) Диктует их javascript, а в javascript нету технических способов использовать прокси с логином и паролем, кроме как запрашивать тупо адрес и подставлять ему параметры другого адреса.

yumata avatar Aug 16 '22 12:08 yumata

Я крайне слабо ориентируюсь в JS, но почему-то был уверен, что есть какой-то класс alaProxy, которому можно передать адрес прокси и строку адреса. Очевидно я ошибался. Придётся огород городить :)

RealCoolmax avatar Aug 16 '22 12:08 RealCoolmax

Не я тут диктую условия)) Диктует их javascript, а в javascript нету технических способов использовать прокси с логином и паролем, кроме как запрашивать тупо адрес и подставлять ему параметры другого адреса.

вроде что то подобие нашёл: на гитхабе пример из stackoverflow

totavok8 avatar Aug 16 '22 12:08 totavok8

вроде что то подобие нашёл: на гитхабе

Это для node.js, а он серверный.

yumata avatar Aug 16 '22 14:08 yumata

Других вариантов нету и не будет.

Я правильно понимаю, что вы свою версию прокси сделали с использованием PHP?

RealCoolmax avatar Aug 16 '22 15:08 RealCoolmax

Да. Если надо, могу скинуть.

yumata avatar Aug 17 '22 11:08 yumata

Да. Если надо, могу скинуть.

Да, было бы интересно посмотреть. Если напрямую с nginx не получится...

RealCoolmax avatar Aug 17 '22 12:08 RealCoolmax

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

yumata avatar Aug 17 '22 12:08 yumata

Вариант, конечно, интересный, с таким доступом к прокси, но сомнительный. Я поднял свой локальный прокси и VPN в network namespaces и жутко обломался. То, что нигде не написано, что данный прокси далек от всем привычного вводит людей в заблуждение. Этот нюанс же нигде не описан.

Я правильно понимаю, что ваш вариант на PHP требует запуска Apache или Nginx? Хотелось бы поподробнее узнать о том, как это все запустить.

P.S. Пытался отредактировать URL при помощи url_rewrite_program в squid и могу сказать, что не стоит на это тратить время. Судя по всему проверка URL происходит раньше, чем перенаправление.

worms-qwe avatar Sep 01 '22 13:09 worms-qwe

worms-qwe

Тут я уже описывал в чем проблема. Это единственный вариант.

yumata avatar Sep 01 '22 14:09 yumata

Я правильно понимаю, что ваш вариант на PHP требует запуска Apache или Nginx?

Да, для использования приведённого выше прокси-скрипта надо поднимать http-сервер. Я на своём VDS поднял Апач. Чутка доработал скрипт и использую его.

RealCoolmax avatar Sep 01 '22 14:09 RealCoolmax

Подскажите если стоит nginx на впс но в директории html уже есть сайт, куда можно скинуть для прокси ваши файлы .htaccess index.php. Я так понимаю можно в корне создать папку и сбросить туда эти файлы. Тогда путь будет http://домен/папка/

dshkoda32 avatar Sep 16 '22 12:09 dshkoda32