Как Вы получаете заголовки по умолчанию в Запросе urllib2?

Не нужно dplyr. Посмотрите на ?as.POSIXlt

df$date<-as.POSIXlt(df$date)
mon<-df$date$mon
yr<-df$date$year
monyr<-as.factor(paste(mon,yr,sep="/"))
df$date<-monyr

Не нужно использовать ggplot2, но это приятно для такого рода вещей.

c <- ggplot(df, aes(factor(date)))
c + geom_bar()

Если вы хотите увидеть фактические цифры

aggregate(. ~ date,data = df,FUN=length )
df2<-aggregate(. ~ date,data = df,FUN=length )
df2
    date value
1   0/98    31
2   0/99    31
3   1/98    28
4   1/99    28
5  10/98    30
6  10/99    30
7  11/97     1
8  11/98    31
9  11/99    31
10  2/98    31
11  2/99    31
12  3/98    30
13  3/99    30
14  4/98    31
15  4/99    31
16  5/98    30
17  5/99    30
18  6/98    31
19  6/99    31
20  7/98    31
21  7/99    31
22  8/98    30
23  8/99    30
24  9/98    31
25  9/99    31
15
задан Corey Goldberg 2 March 2009 в 20:41
поделиться

4 ответа

urllib2 библиотека использует объекты OpenerDirector обработать фактическое открытие. К счастью, библиотека Python обеспечивает значения по умолчанию, таким образом, Вы не имеете к. Это - однако, эти объекты OpenerDirector, которые добавляют дополнительные заголовки.

Для наблюдения, что они после того, как запрос был отправлен (так, чтобы можно было зарегистрировать его, например):

req = urllib2.Request(url='http://google.com')
response = urllib2.urlopen(req)
print req.unredirected_hdrs

(produces {'Host': 'google.com', 'User-agent': 'Python-urllib/2.5'} etc)

unredirected_hdrs - то, где OpenerDirectors выводят свои дополнительные заголовки. Просто рассмотрение req.headers покажет только Ваши собственные заголовки - библиотека оставляет в безопасности для Вас.

, Если необходимо видеть заголовки, прежде чем Вы отправите запрос, необходимо будет разделить OpenerDirector на подклассы для прерывания передачи.

Hope, которая помогает.

РЕДАКТИРОВАНИЕ: Я забыл упоминать, что, как только запрос, как отправлено, req.header_items() даст Вам список кортежей ВСЕХ заголовков, и с Вашим собственным и с теми добавленными OpenerDirector. Я должен был упомянуть это сначала, так как это - самый простой:-), Извините.

РЕДАКТИРОВАНИЕ 2: После Вашего вопроса о примере для определения Вашего собственного обработчика вот образец, который я придумал. Беспокойство в любом monkeying с цепочкой запроса - то, что мы должны быть уверены, что обработчик безопасен для нескольких запросов, который является, почему мне неудобна просто замена определения putheader на классе HTTPConnection непосредственно.

К сожалению, потому что внутренности HTTPConnection и AbstractHTTPHandler являются очень внутренними, мы должны воспроизвести большую часть кода из библиотеки Python для введения нашего пользовательского поведения. Принятие я не попал впросак ниже и это работает, а также оно сделало за мои 5 минут тестирования, стараться пересмотреть это переопределение при обновлении версии Python к числу пересмотра (т.е.: 2.5.x к 2.5.y или 2.5 к 2,6, и т.д.).

я должен поэтому упомянуть, что нахожусь на Python 2.5.1. Если Вы имеете 2.6 или, особенно, 3.0, Вы, возможно, должны скорректировать это соответственно.

сообщите мне, не работает ли это. У меня есть waaaayyyy слишком много забавы с этим вопросом:

import urllib2
import httplib
import socket


class CustomHTTPConnection(httplib.HTTPConnection):

    def __init__(self, *args, **kwargs):
        httplib.HTTPConnection.__init__(self, *args, **kwargs)
        self.stored_headers = []

    def putheader(self, header, value):
        self.stored_headers.append((header, value))
        httplib.HTTPConnection.putheader(self, header, value)


class HTTPCaptureHeaderHandler(urllib2.AbstractHTTPHandler):

    def http_open(self, req):
        return self.do_open(CustomHTTPConnection, req)

    http_request = urllib2.AbstractHTTPHandler.do_request_

    def do_open(self, http_class, req):
        # All code here lifted directly from the python library
        host = req.get_host()
        if not host:
            raise URLError('no host given')

        h = http_class(host) # will parse host:port
        h.set_debuglevel(self._debuglevel)

        headers = dict(req.headers)
        headers.update(req.unredirected_hdrs)
        headers["Connection"] = "close"
        headers = dict(
            (name.title(), val) for name, val in headers.items())
        try:
            h.request(req.get_method(), req.get_selector(), req.data, headers)
            r = h.getresponse()
        except socket.error, err: # XXX what error?
            raise urllib2.URLError(err)
        r.recv = r.read
        fp = socket._fileobject(r, close=True)

        resp = urllib2.addinfourl(fp, r.msg, req.get_full_url())
        resp.code = r.status
        resp.msg = r.reason

        # This is the line we're adding
        req.all_sent_headers = h.stored_headers
        return resp

my_handler = HTTPCaptureHeaderHandler()
opener = urllib2.OpenerDirector()
opener.add_handler(my_handler)
req = urllib2.Request(url='http://www.google.com')

resp = opener.open(req)

print req.all_sent_headers

shows: [('Accept-Encoding', 'identity'), ('Host', 'www.google.com'), ('Connection', 'close'), ('User-Agent', 'Python-urllib/2.5')]
5
ответ дан 1 December 2019 в 03:43
поделиться

Как насчет чего-то вроде этого:

import urllib2
import httplib

old_putheader = httplib.HTTPConnection.putheader
def putheader(self, header, value):
    print header, value
    old_putheader(self, header, value)
httplib.HTTPConnection.putheader = putheader

urllib2.urlopen('http://www.google.com')
2
ответ дан 1 December 2019 в 03:43
поделиться

см. urllib2.py:do_request (строка 1044 (1067)) и urllib2.py:do_open (строка 1073) (строка 293) self.addheaders = [('Агент пользователя', client_version)] (только добавленный 'Агент пользователя')

0
ответ дан 1 December 2019 в 03:43
поделиться

Это должно отправить значение по умолчанию http заголовки (как определено w3.org ) вместе с теми, Вы определяете. Можно использовать инструмент как WireShark, если требуется видеть их в их полноте.

Редактирование:

, Если требуется зарегистрировать их, можно использовать WinPcap для получения пакетов, отправленных определенными приложениями (в случае, Python). Можно также определить тип пакетов и многих других деталей.

- Джон

-1
ответ дан 1 December 2019 в 03:43
поделиться
Другие вопросы по тегам:

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