2013-05-27 1 views
0

Прежде всего позвольте мне выразить благодарность сообществу Stack Overflow - хотя я еще не опубликовал его раньше, я нашел бесчисленные решения моих проблем в прошлом , Я очень ценю время и энергию, которые сообщество инвестирует в создание этого отличного ресурса для всех.Проблема с Python: не удается получить данные хрр-опроса, используя библиотеку запросов

Я пытаюсь получить данные с сервера, который использует Socket.IO в сочетании с данными XHR-опроса. Хотя я могу, похоже, подключиться к скрипту Python, я не могу правильно получать данные.

Я просмотрел исходящие и входящие пакеты в Fiddler: каждые 5 секунд браузер получает полезную информацию (например, «5 ::: {« name »:« pollData »,« args »: [" < .. '), но сценарий Python получает ответы NOOP (' 8 :: ')

Проблемные часть кода:.

reply = requests.get(URL + "/socket.io/1/?t=" + str(long(time.time()*1000)), headers=headers) 

session_id = reply.text.split(':')[0] 

print "Session ID:", session_id 

reply = requests.post(URL + "/socket.io/1/xhr-polling/" + session_id + "?t=" +    
         str(long(time.time()*1000)), data=message, headers=headers) 

print "Successfully subscribed." 

for i in range(5): 
    sleep(5) 
    reply = requests.get(URL + "/socket.io/1/xhr-polling/" + session_id + "?t=" + 
         str(long(time.time()*1000)), headers=headers) 
    print reply.text 

Я попытался с помощью WebSocket-клиент, но генерирует эту ошибку: WebSocketException: Статус подтверждения связи 200

SocketIO-клиент производит эту ошибку: SocketIOError: Не удалось установить соединение

Более важно, чем использовать другую библиотеку для решения этой проблемы, я хотел бы понять, почему это происходит. Исходящие пакеты, созданные скриптом и Chrome, выглядят, по крайней мере, непрофессионалу, в основном одинаковые - почему они производят такие разные результаты?

(Пожалуйста можете задать любые вопросы или запросить дополнительную информацию.)

ответ

0

Только в случае, если это выгодно кому-то в будущем, после долгих проб и ошибок я понял, что он нужен был еще один запрос GET, прежде чем он мог бы POST информацию о подписке. Некоторые из кода ниже могут быть излишними, но это, кажется, работает:

reply = requests.get(url + "?t=" + get_timecode(), stream=True) 
session_id = reply.text.split(':')[0] 
main = requests.Session() 

print "Session ID:", session_id 

reply = main.get(url + "xhr-polling/" + session_id + "?t=" + get_timecode(), 
       stream=True) 
reply = main.post(url + "xhr-polling/" + session_id + "?t=" + get_timecode(), 
        data=subscribe, stream=True) 

print "Successfully subscribed." 

while 1: 
    reply = main.get(url + "xhr-polling/" + session_id + "?t=" + get_timecode(), 
        stream=True) 

[Обратите внимание, что это было только потому, что WebSocket сервера было сломано и Socket.IO пришлось Откат на XHR-опросе. Кроме того, есть, вероятно, гораздо более простые способы сделать это.]

+0

Думаю, вы получите session_id = '0', чтобы получить идентификатор сеанса, который вы можете использовать в последующих запросах. или это «1»? – abourget

 Смежные вопросы

  • Нет связанных вопросов^_^