Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разбираясь с urllib2 
V
    Опции темы
kulibinka
Дата 20.2.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 20.11.2006

Репутация: 2
Всего: 4



Обьясните пожалуйста разницу между этими ф-ями:

Код


import urllib, urllib2

def text_to_file (text, f_name):
    f = open(f_name, 'w')
    f.write(text)
    f.close()
    
def send_yandex_query1 (query):
    url = 'http://www.yandex.ru/yandsearch'

    txheaders = {
        'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
        'Accept-Language': 'en-us',
        'Cache-Control': 'max-age=0',
        'Referer':'http://www.google.com.ua/advanced_search?hl=uk',
    }

    data = {'text':query}
    data = urllib.urlencode(data)

    req = urllib2.Request(url, data, txheaders)
    u = urllib2.urlopen(req)
    page = u.read()

    text_to_file(page, 'yandex.html')
    return page


def send_yandex_query2 (query):
    url = 'http://www.yandex.ru/yandsearch'

    data = {'text':query}
    data = urllib.urlencode(data)

    full_url = url + '?' + data
    u = urllib2.urlopen(full_url)
    page = u.read()

    text_to_file(page, 'yandex.html')
    return page

send_yandex_query1('find_me')


и первая, и вторая на мой взлгляд должны работать абсолютно одинаково. 
Но!
первая не работает так как надо (не отсылает запрос, а открывает страницу "Задан пустой поисковый запрос"), а вторая отлично все отсылает.
PM MAIL   Вверх
_Viper_
Дата 20.2.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 8.11.2006

Репутация: 10
Всего: 11



В первом случае, скорее всего, используется POST, во втором GET. Если yandex не поддерживает запросы через POST, то тогда понятно почему выдаёт страницу "Задан пустой поисковый запрос".
PM MAIL   Вверх
kulibinka
Дата 20.2.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 20.11.2006

Репутация: 2
Всего: 4



Попробовал проверить Ваше "скорее всего"

Тут http://www.diveintopython.org/http_web_ser...user_agent.html код, который теоретически должен был бы показать все заголовки:

Код

import httplib

httplib.HTTPConnection.debuglevel = 1
request = urllib2.Request('http://google.com.ua') 
opener = urllib2.build_opener()
feeddata = opener.open(request).read()


Почему в ответ просто черный экран, где обещанные connect, send и т.д.?
PM MAIL   Вверх
albertn
Дата 21.2.2007, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



http://docs.python.org/lib/module-urllib2.htm
Цитата

the HTTP request will be a POST instead of a GET when the data parameter is provided.

PM WWW ICQ   Вверх
_Viper_
Дата 21.2.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 8.11.2006

Репутация: 10
Всего: 11



Цитата(albertn @  21.2.2007,  09:55 Найти цитируемый пост)
the HTTP request will be a POST instead of a GET when the data parameter is provided.
Не подходит, поскольку параметр data, как раз, не задан.

Цитата(kulibinka @  20.2.2007,  22:32 Найти цитируемый пост)
Почему в ответ просто черный экран, где обещанные connect, send и т.д.?
Просто в urllib2 debuglevel явно изменяется, поэтому рабочий код выглядит так:
Код

import urllib2
http = urllib2.HTTPHandler(debuglevel=1)
request = urllib2.Request('http://google.com.ua')

opener = urllib2.build_opener(http)
feeddata = opener.open(request).read()


Это сообщение отредактировал(а) _Viper_ - 21.2.2007, 11:55
PM MAIL   Вверх
kulibinka
Дата 23.2.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 191
Регистрация: 20.11.2006

Репутация: 2
Всего: 4



Используя debuglevel=1 проверил - первая ф-ю посылает пост, вторая гет. И яндекс действительно не поддреживает пост.

Спасибо огромное!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0741 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.