![]() |
Как правильно работать с http прокси?
Допустим http заголовок отсылается через сокет а в сокете задается и и порт хттп прокси.Как в этом случае обрабатывать исключительные ситуации возникающие с проксей?
к примеру если прокси берутся из списка и какая то прокся в этом списке уже сдохла,или это просто не прокся, как это отловить? Или я вот недавно пытался получать содержимое хтмл страницы через прокси ,только получалось в 3 из 5 раз.Иногда бывало такое запрос отослался recv вроде как что принимает но в буффере пусто :confused: Почему так случается и как это можно предупредить? И где можно посмотреть ошибки которые может возвращять прокся? |
На то, сдохла прокся или нет, можешь тупо проверку соединения делать. Чтобы узнать, что это проксик попробуй отсылать http запросы с различными методами для проверки типа OPTIONS, вроде должно помочь ;)
|
Вообще перед юзаньем прокси попробуй пинговать её, чтобы не терять много времяни на коннект(код пинга - простой очень). Если пингуется то юзаешь её пока нужно. если вдруг connect не прошел то пингуй снова. если не пингуется то удаляй из списка.
На счет прокси или нет - Удобно очень проверять по контрольной странице. К примеру твой какойнить твой скрипт в инете котоырй будет говорить ОК. Ну или яндекс или подобные вещи. Главное чтобы ты точно знал что смог подключиться. На счет recv принимает но буфер пуской. Может ты не правильно загружаешь данные? Или может возникнуть проблема с проверкой буфера если там попадется символ \0 НА счет кода ответа HTTP прокси то первое что шлет он это будет типа HTTP/1.0 404 Not Found Сам код можешь получить выбрав среднее слово. типа s:='HTTP/1.0 404 Not Found....'; code:=inttostr(copy(s,pos(' ',s)+1,3)); Коды ответов сервера ищи в RFC2616 и RFC3143 |
Цитата:
|
нет. стандартными функциями. В более развернутом виде это выглядит так:
Нижеследующий код с легкостью можно переписать в несколько десятков строк, без дополнительного использования левых модулей. Код:
unit raw_ping; |
Цитата:
|
функцию резолва (TranslateStringToTInAddr) можеш найти где угодно на Сях.
А функцию Ping перевести на Си не составит труда. Она и так маленькая и там не используется некаких дельфийских прибамбасов |
IcmpCreateFile и IcmpSendEcho в потоках можно юзать без проблем?
|
| Время: 17:36 |