Python urllib кеш - PullRequest
       4

Python urllib кеш

0 голосов
/ 20 июля 2011

Я пишу скрипт на Python, который должен определить, есть ли у него доступ в Интернет.

import urllib

CHECK_PAGE     = "http://64.37.51.146/check.txt"
CHECK_VALUE    = "true\n"
PROXY_VALUE    = "Privoxy"
OFFLINE_VALUE  = ""

page = urllib.urlopen(CHECK_PAGE)
response = page.read()
page.close()

if response.find(PROXY_VALUE) != -1:
    urllib.getproxies = lambda x = None: {}
    page = urllib.urlopen(CHECK_PAGE)
    response = page.read()
    page.close()

if response != CHECK_VALUE:
    print "'" + response + "' != '" + CHECK_VALUE + "'" # 
else:
    print "You are online!"

Я использую прокси на своем компьютере, поэтому правильная обработка прокси важна.Если он не может подключиться к Интернету через прокси-сервер, он должен обойти прокси-сервер и посмотреть, не застрял ли он на странице входа (как это делают многие публичные точки доступа).С этим кодом, если я не подключен к Интернету, первый read () возвращает страницу с ошибкой прокси.Но когда я обхожу прокси после этого, я получаю ту же страницу.Если я пропускаю прокси ПЕРЕД выполнением каких-либо запросов, я получаю сообщение об ошибке, как и должно быть.Я думаю, что Python кеширует страницу с первого раза.

Как заставить Python очистить свой кеш (или это какая-то другая проблема)?

Ответы [ 2 ]

3 голосов
/ 02 августа 2012

Вызывайте urllib.urlcleanup () перед каждым вызовом urllib.urlopen (), чтобы решить проблему. На самом деле urllib.urlopen вызывает функцию urlretrive (), которая создает кэш для хранения данных, а urlcleanup () удаляет его.

0 голосов
/ 20 июля 2011

Вы хотите

page = urllib.urlopen(CHECK_PAGE, proxies={})

Удалить

urllib.getproxies = lambda x = None: {}

линия.

...