Przykład przesyłania strumieniowego żądań nie działa w moim środowisku
Próbowałem wykorzystać API strumieniowego przesyłania strumieniowego za pomocą poleceń Pythona.
Jestprosty przykład w dokumentacji:
import requests
import json
r = requests.post('https://stream.twitter.com/1/statuses/filter.json',
data={'track': 'requests'}, auth=('username', 'password'))
for line in r.iter_lines():
if line: # filter out keep-alive new lines
print json.loads(line)
Kiedy wykonam to, zadzwoń dorequests.post()
nigdy nie wraca. Eksperymentowałem i udowodniłem, że zdecydowanie łączy się z Twitterem i odbiera dane z API. Jednak zamiast zwracać obiekt odpowiedzi, po prostu siedzi tam zużywając tyle danych, ile wysyła Twitter. Sądząc po powyższym kodzie, spodziewałbym sięrequests.post()
zwrócić obiekt odpowiedzi z otwartym połączeniem do Twittera, który mógłbym nadal otrzymywać w czasie rzeczywistym.
(Aby udowodnić, że odbierał dane, połączyłem się z Twitterem przy użyciu tych samych danych uwierzytelniających w innej powłoce, po czym Twitter zamknął pierwsze połączenie, a połączenie zwróciło obiekt odpowiedzi.r.content
atrybut zawierał wszystkie kopie zapasowe danych odebranych podczas połączenia.)
Dokumentacja nie wspomina o żadnych innych czynnościach wymaganych do spowodowaniarequests.post
powrócić przed zużyciem wszystkich dostarczonych danych. Inni ludzie wydają się używać podobnego kodu bez napotkania tego problemu, np.tutaj.
Używam:
Python 2.7Ubuntu 11.04Żądania 0.14.0