И Perl и Python (и вероятно Ruby также) имеют простые наборы, которые можно использовать для быстрого создания простых Прокси HTTP.
В Perl используйте HTTP::Proxy. Вот пример с 3 строками из документации. Добавьте фильтры, чтобы отфильтровать, зарегистрировать или переписать запросы или ответы; см. документацию для примеров.
use HTTP::Proxy;
my $proxy = HTTP::Proxy->new( port => 3128 );
$proxy->start;
В Python используйте SimpleHTTPServer. Вот некоторый пример кода, слегка адаптированный от effbot. Адаптируйтесь do_GET
метод (или другие) для фильтрации зарегистрируйте или перепишите запросы или ответы.
import SocketServer
import SimpleHTTPServer
import urllib
class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.copyfile(urllib.urlopen(self.path), self.wfile)
httpd = SocketServer.ForkingTCPServer(('', 3128), Proxy)
httpd.serve_forever()
(
не специальный символ в sed регулярных выражениях. Вы не должны выходить из него.
sed -e 's/jQuery(function/head.ready(function/g'
[(]
в regex означает набор символов, содержащий всего один элемент, (
. Это - замысловатый способ записать (
.
[(]
в тексте замены означает эти три символа [(]
. Скобки не имеют никакого особого значения в тексте замены.
Можно постараться не повторять имя функции, если Вам нравится путем помещения его в группу. Группы разграничены круглой скобкой обратной косой черты.
sed -e 's/jQuery(\(function\)/head.ready(\1/g'
Остерегайтесь та Ваша замена будет также влиять jQuery(functionwithsuffix
. Простой способ избежать этого состоит в том, чтобы использовать инструмент, который понимает расширенные регулярные выражения Perl, таким образом, можно использовать (?![^A-Za-z0-9_])
в конце строки поиска, означая “сопровождаемый чем-то, что не является буквенно-цифровым знаком”. Обратите внимание на это в регулярных выражениях Perl, (
является особенным, необходимо снабдить префиксом его обратную косую черту.
perl -pe 's/jQuery\(function(?![^A-Za-z0-9_])/head.ready(function/g'
perl -pe 's/jQuery\((function)(?![^A-Za-z0-9_])/head.ready($1/g'
Нет никакой потребности выйти из скобок в замещающей строке.
sed -e 's/jQuery[(]function/head.ready(function/g'
(
является специальным символом в sed, если используется расширенное регулярное выражение(ERE).
Например, sed -e
завершится с ошибкой Несопоставленная ошибка , когда по какой-либо причине )нужно выйти из круглых скобок (, но запустить sed без указания ЭРЭ:
$ regex="\("; echo "...(..." | sed 's/'$regex'/_/g'
sed: -e expression #1, char 8: Unmatched ( or \(
$ regex="\("; echo "...(..." | sed -e 's/'$regex'/_/g'
sed: -e expression #1, char 8: Unmatched ( or \(
В таком случае вам придется использовать sed с опцией -E
(или -r
, --regexp-extended
):
$ regex="\("; echo "...(..." | sed -E 's/'$regex'/_/g'
..._...
$ regex="\("; echo "...(..." | sed -r 's/'$regex'/_/g'
..._...
sed
диалекты, хотя это должно быть корректно для большинства платформ. Существует только один Perl, таким образом, альтернатива Perl могла бы закончить тем, что была самой простой при необходимости в портативном решении (хотя даже затем Вам нужно другое заключение в кавычки, если необходимо быть портативными к Windows)-: – tripleee 28.06.2013, 08:36)
подобный(
? – Timo 28.12.2017, 13:56