Изменение агента пользователя на urllib2.urlopen

Вы, кажется, неправильно поняли, что означает distance = e - o. Это не значит, что distance будет меняться в зависимости от e и o. Это просто означает, что все значения e и o, которые хранятся в данный момент, используются для вычисления значения distance, и distance будет иметь то же значение, пока вы его не измените. Изменение e или o после этой строки не влияет на distance. Следовательно, distance всегда будет -1.

Вы также, кажется, используете вложенные циклы. Это не нужно здесь. Вот общий алгоритм:

for each element x in the array
    if x is odd then
        record x's position in y
    if an odd number has been found and x is even then
        return x's position minus y

А вот код:

public static int oddEven(int[] numbers) {
    int oddPosition = -1;
    for (int i = 0 ; i < numbers.length ; i++) {
        if (numbers[i] % 2 == 1) {
            oddPosition = i;
        }
        if (oddPosition != -1 && numbers[i] % 2 == 0) {
            return i - oddPosition;
        }
    }
    return -1;
}
97
задан 29 April 2009 в 12:32
поделиться

2 ответа

Основной шаблон для такого рода вещей:

иметь поток, выполняющий цикл, который обновляет переменную (например, индекс кадра анимированного изображения), а затем вызывает invalidate для Поле, которое рисует изображение (а затем спит в течение определенного периода времени). Недействительный объект поставит в очередь перерисовку поля.

В методе рисования поля прочитайте переменную и нарисуйте соответствующий кадр изображения.

Псевдокод (не полностью полный, но чтобы дать вам идею):

public class AnimatedImageField extends Field implements Runnable {

   private int currentFrame;
   private Bitmap[] animationFrames;

   public void run() {
     while(true) {
       currentFrame = (currentFrame + 1) % animationFrames.length;
       invalidate();
       Thread.sleep(100);
      }
    }

   protected void paint(Graphics g) {
      g.drawBitmap(0, 0, imageWidth, imageHeight, animationFrames[currentFrame], 0, 0);
    }
  }

Также обратите внимание, что здесь я использовал массив растровых изображений, но EncodedImage позволяет обрабатывать анимированный GIF как один объект и включает методы для получения определенных кадров.

РЕДАКТИРОВАТЬ: Для полноты: добавьте это в PopupScreen (как в ответе Фермина ) или создайте свой собственный диалог, переопределив Screen напрямую. и будет обрабатываться так, как если бы add_header () вызывался с каждым ключом и значением в качестве аргументов. Это часто используется для «подмены» заголовка User-Agent , который используется браузером для идентификации себя - некоторые HTTP-серверы разрешают запросы, поступающие только от общих браузеров, в отличие от сценариев. Например, Mozilla Firefox может идентифицировать себя как «Mozilla / 5.0 (X11; U; Linux i686) Gecko / 20071127 Firefox / 2.0.0.11» , тогда как urllib2 является пользовательским агентом по умолчанию строка "Python-urllib / 2.6" (на Python 2.6).

59
ответ дан 24 November 2019 в 05:19
поделиться

Я ответил на аналогичный вопрос пару недель назад.

В этом вопросе есть пример кода, но в основном вы можете сделать что-то вроде это: (Обратите внимание на использование заглавных букв User-Agent по состоянию на RFC 2616 , раздел 14.43.)

opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
response = opener.open('http://www.stackoverflow.com')
115
ответ дан 24 November 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: