@maksimiron13 said in Ошибка с прокси:
Подскажите,что делать ?
Попробуйте отдельно указать логин и пароль в кубике прокси, а не вместе с ip:port
Посоветуйте плиз, как лучше реализовать смену прокси. Ситуация такая: беру

Вопрос, если не применяется (как на картинке) - как сделать так, чтобы он автоматом брал следующий - и пока не будет рабочего прокси, дальше цикл идти не будет?
(До этого прокси лист тестил на чекерах, вроде все валидные)
@ogurchiki
Делаю такое через создание и вызов рекурсивной функции такого вида.

Иногда сайт блочит IP, но всё равно отдает 200. В этом случае, добавляю проверку содержимого тега title через XPATH
Можно через цикл делать, хоть это и менее изящно. Примерно так:

Сайт, к которому отправляем запрос, разумеется, подставляем свой =)
@xclsv попытался сделать через вызов функции, выдает такую ошибку (в логе):
//[14:22:19] Поток №1 : ReferenceError: Can't find variable: change_proxy Номер строки:3 Во время выполнения скрипта { _call(change_proxy,null,function(){ _next_or_section(1,function(){ })})}
Я все правильно делаю? Эту функцию надо в начале скрипта писать? или как-то вызывать?
1.Создал новую функцию (OnApplicationStart)
2. 
Функция change_proxy это уже готовая функция? или её нужно самому создать?
Какая структура получается?
Http клиент берет прокси;
Отправляет get-Запрос на яндекс;
Сохраняет статус ответа;
Потом если статус ответа 200, то сохраняет в переменную WAS_EROR ( это что за переменная**?**) (непонятно)
И вызывает функцию change_proxy ? (непонятно)
А если нормально все(статус ответа не 200) - то он должен продолжать дальше цикл?
Сорри за глупые вопросы)
@ogurchiki В BAS'e нет готовых функций, все функции создаёшь, называешь и вызываешь сам.
В мануале всё есть:
Вы можете прочитать переменную WAS_ERROR чтобы проверить, были ли ошибки во время последнего блока «Игнорировать Ошибки».
В переменной LAST_ERROR содержится текст ошибки.
@ogurchiki said in Смена прокси:
@xclsv попытался сделать через вызов функции, выдает такую ошибку (в логе):
//[14:22:19] Поток №1 : ReferenceError: Can't find variable: change_proxy Номер строки:3 Во время выполнения скрипта { _call(change_proxy,null,function(){ _next_or_section(1,function(){ })})}Я все правильно делаю? Эту функцию надо в начале скрипта писать? или как-то вызывать?
Как верно написал выше Fox, все функции, кроме OnApplicationStart пишутся вручную. Ошибка в логе как раз и говорит о том, что функцию change_proxy в программе никто не объявлял и не описывал. Чтобы все заработало, необходимо создать функцию с таким названием, вставить в нее блоки вроде тех, что в моем первом ответе в топике и вызвать в том месте программы, где необходимо определить или сменить прокси. Крайне рекомендую почитать о том, что такое рекурсия. Это решит ещё 100500 проблем в будущем.
1.Создал новую функцию (OnApplicationStart)
2.Функция change_proxy это уже готовая функция? или её нужно самому создать?
Да, в каких-то случаях такое можно использовать в OnApplicationStart. Но что тогда делать, если прокси слетит во время работы скрипта или нужно будет использовать прокси в многопотоке? В общем, от использования OnApplicationStart рекомендую отказаться и сделать как я описал Выше.
Ошибка на твоем скриншоте также в том, что ты дважды на одной итерации запрещаешь повторно использовать строку ресурса. Тоесть у тебя программа использует первый прокси, выведет в лог уже второй. А если прокси окажется плохим, то использует третий, а второй просто выведет в лог и пропустит. Не следует запрещать использовать строку ресурса повторно в блоке Http клиент прокси
Какая структура получается?
Http клиент берет прокси;
Отправляет get-Запрос на яндекс;
Сохраняет статус ответа;
Потом если статус ответа 200, то сохраняет в переменную WAS_EROR ( это что за переменная**?**) (непонятно)
И вызывает функцию change_proxy ? (непонятно)
А если нормально все(статус ответа не 200) - то он должен продолжать дальше цикл?Сорри за глупые вопросы)
WAS_ERROR - это переменная, которая автоматически объявляется при использовании в скрипте блока Игнорировать ошибки. Если этот блок не использовать, то в твоем случае, если прокси окажется мертвым, программа вылетит с ошибкой. А при его использовании работа будет продолжаться. Сразу после отработки этого блока в переменную WAS_ERROR запишется 1, если ошибка была или 0, если ошибки не было.
Структура примерно такая:
Пара моментов, прокси из ресурса лучше брать в переменную, чтобы её потом выводить в лог или применять. В WAS_ERROR содержится булево, то есть "true" (да, была ошибка) или "false" (ошибки не было).
Работало, работало.. а потом бац - ошибка:
[19:49:34] Поток №1 : ReferenceError: Can't find variable: VAR_SAVED_STATUS Номер строки:2 Во время выполнения скрипта {
_if((VAR_SAVED_STATUS!=200)||(VAR_WAS_ERROR),function(){
section_insert()
section_start("test", 911045989,function(){
})},function(){
section_start("test", 33363679,function(){ })})}
=\
@ogurchiki said in Смена прокси:
Работало, работало.. а потом бац - ошибка:
[19:49:34] Поток №1 : ReferenceError: Can't find variable: VAR_SAVED_STATUS Номер строки:2 Во время выполнения скрипта { _if((VAR_SAVED_STATUS!=200)||(VAR_WAS_ERROR),function(){ section_insert() section_start("test", 911045989,function(){ })},function(){ section_start("test", 33363679,function(){ })})}=\
Ошибка указывает на то, что переменная SAVED_STATUS не объявлена на момент ее использования.
Кинь скрин кода.
@xclsv Протестил, если код ответа не 200, то ошибка:
Code:
//{
CYCLE_INDEX: 0,
LAST_ERROR: "Could not resolve host: sdffsdfsdfs.fdsfsd.ru",
NEW_VARIABLE: "85.15.69.131:8081",
SAVED_STATUS: "undefined",
SAVED_TEXT: "undefined",
WAS_ERROR: true
}
Скрин:
@ogurchiki смотри, у тебя ошибка возникает при гет запросе, и метка выполнения выходит из блока игнорирования ошибок минуя получение статуса. В логе же ты выводишь переменную статуса ответа, которой нету. Нужно менять логику так, что бы либо не использовать статус ответа, либо прлучать его только если запрос был без ошибок
@ogurchiki said in Смена прокси:
@xclsv Протестил, если код ответа не 200, то ошибка:
Code: //{ CYCLE_INDEX: 0, LAST_ERROR: "Could not resolve host: sdffsdfsdfs.fdsfsd.ru", NEW_VARIABLE: "85.15.69.131:8081", SAVED_STATUS: "undefined", SAVED_TEXT: "undefined", WAS_ERROR: true }Скрин:
Да, @DrPrime правильно пишет.
@ogurchiki said in Смена прокси:
@xclsv Вроде все сделал, все-равно ошибка...
Если не сложно, покажите (скрином) как в итоге должно получиться, например с костылем
"Можно вставить костыль и в самом начале записать в переменную SAVED_STATUS ноль."
Никак не получается
Перед http-клиент прокси вставляем блок Установить переменную. Параметры блока такие:

@xclsv да, теперь все пашет (меняются прокси без ошибок), даже когда сайт не але и прокси не але (тьфу тьфу). Утром попробовал добавить переменную 0 в SAVED_STATUS - не получалось, видимо из-за типа значения. по дефолту тип значения не int. В этих вещях начинающий, разницы не увидел. Еще раз биг сенк)

@ogurchiki said in Смена прокси:
@xclsv да, теперь все пашет (меняются прокси без ошибок), даже когда сайт не але и прокси не але (тьфу тьфу). Утром попробовал добавить переменную 0 в SAVED_STATUS - не получалось, видимо из-за типа значения. по дефолту тип значения не int. В этих вещях начинающий, разницы не увидел. Еще раз биг сенк)
Да, именно из-за этого =)
Тоже возникла проблемка при смене прокси. Сделал так, как здесь описано, правда я работаю через браузер, но думаю это не особо важно - принцип такой же.
Создал ресурс, где прокси берутся по ссылке, нужно проверять что это РУ прокси, если нет - ошибка и снова вызов функции. Так вот, если указываю для прокси параметр notreuse, то скрипт отрабатывает ошибку (если прокси не подходит), переходит к установке прокси и все, зависает.
Если же notreuse не указан, то скрипт берет все время один и тот же прокси.
Где косяк? Помогите )