PyQt4: извлекать значения из rawHeaderList

#python #qt4 #pyqt4

#питон #qt4 #pyqt4 #python

Вопрос:

Я хочу прочитать заголовки из, rawHeaderList используя QNetworkReply , как выполнить это действие? Я пытаюсь выполнить итерацию, но он говорит, что QNetworkRaply объект не может быть повторен, говорит простая печать <PyQt4.QtNetwork.QNetworkReply object at 0x1837958> .

Вот мой код

 
...
request = QNetworkRequest(QUrl('http://www.kg'))
manager = QNetworkAccessManager()

reply = manager.get(request)

'''
How to get the list of headers?
'''
  

Султан

Ответ №1:

Много способов. Вы можете использовать reply.rawHeaderPairs() , например:

 import pprint, sys
from PyQt4 import QtCore, QtNetwork

app = QtCore.QCoreApplication(sys.argv)
request = QtNetwork.QNetworkRequest(QtCore.QUrl("http://stackoverflow.com"))
manager = QtNetwork.QNetworkAccessManager()
reply = manager.get(request)
while not reply.isFinished():
    app.processEvents()

try:
    # for Qt 4.7 and higher:
    pprint.pprint(reply.rawHeaderPairs())
except AttributeError:
    # for Qt < 4.7:
    for header in reply.rawHeaderList():
        pprint.pprint((header, reply.rawHeader(header)))
  

Смотрите также QNetworkReply документацию, особенно rawHeader , rawHeaderList , header и другие методы.

Редактировать примечание: Я обновил пример, чтобы сделать его совместимым со старыми версиями Qt / PyQt (до версии 4.7).

Комментарии:

1. Этот код выдает ошибку: AttributeError: 'QNetworkReply' object has no attribute 'rawHeaderPairs'

2. Какую версию PyQt4 вы используете? Этот код отлично работает на моей машине с PyQt4 4.8.3. Документы предполагают, что rawHeaderPairs существует в версиях Qt 4.7 и выше.

3. В любом случае, пример обновления, теперь должен работать также с более ранними версиями Qt.