Seite 1 von 1
Requests Error
Verfasst: Montag 13. Juni 2022, 13:14
von SomePythonDude
Hi!
Ich benutze requests und sseclient um von einer Webseite mir bestimmte Daten zu ziehen (Börse Frankfurt). Auf meinem Lokalen PC funktioniert auch alles einwandfrei. Doch wenn ich dies auf meinen Ubuntu 20.04 LTS mit Python Version 3.10 aufspiele und laufen lasse, kommt folgender Fehler:
requests.exceptions.InvalidURL: Failed to parse: <Response [200]>
Ich benutze die selbe versionen sowohl von den Library als auch von Python. Wieso kommt dieser Fehler zustande?
Das Script findet ihr hier:
https://github.com/joqueka/bf4py
Mein Code sieht wie folgt aus:
Code: Alles auswählen
client = bf4py.live_data.live_quotes(sys.argv[1], callback=json, mic="XSC")
client.open_stream()
while True:
sleep(5)
print(client.data[-1])
Danke für jegliche unterstützung!

Re: Requests Error
Verfasst: Montag 13. Juni 2022, 15:35
von __blackjack__
@SomePythonDude: Wie sieht denn die URL aus?
Re: Requests Error
Verfasst: Montag 13. Juni 2022, 18:43
von SomePythonDude
"
https://api.boerse-frankfurt.de/v1/data ... P5&mic=XSC"
Dies ist die URL, wenn ich die Webseite öffne, dann funktioniert es einwandfrei. Nur halt auf meinem Mac

Re: Requests Error
Verfasst: Montag 13. Juni 2022, 19:53
von __blackjack__
@SomePythonDude: Ist das die URL die Du jetzt in den Browser eingegeben hast, weil Du weisst das die richtig ist, oder *tatsächlich* die URL die das Programm benutzt?
Re: Requests Error
Verfasst: Montag 13. Juni 2022, 20:29
von SomePythonDude
Das ist ein Socket den die Börse benutzt um Echtzeitdaten auf der Webseite darzustellen. Dieses Package(der programmierer) hat die schnittstelle raus gefunden.
Gefunden habe ich das in dem code von ihm:
Code: Alles auswählen
socket = requests.get(url, stream=True, headers=header, timeout=(3.5, 5))
print(socket) #Output "<Response [200]>"
client = sseclient.SSEClient(socket)
scheinbar wird requests im stream benutzt, nur wenn socket geprinted wird, kommt dabei dieser Response raus.
Auf Mac/Windows scheint das auch gut zugehen, nur irgendwie nicht auf Ubuntu 20.04. Deshalb auch der Fehler: Failed to parse: <Response [200]>, weil dies keine URL ist.
Re: Requests Error
Verfasst: Montag 13. Juni 2022, 21:56
von __blackjack__
@SomePythonDude: Die Frage ist halt was `url` bei diesem Aufruf *tatsächlich* für einen Wert hat. Nicht was Du glaubst, nicht was Du wünschst, sondern was das tatsächlich für ein Wert ist.
Re: Requests Error
Verfasst: Dienstag 14. Juni 2022, 13:52
von SomePythonDude
Ich habe jetzt den sseclient ausgebaut und stattdessen Requests Session mit Stream=True und ohne Timeout verwendet. Das klappt einwandfrei.
Ich denke es lag daran das der client die eingabe: "<Response [200]>" nicht verarbeiten konnte. Komisch das es auf Mac und Windows geht, finde es aber auch noch heraus

Re: Requests Error
Verfasst: Dienstag 14. Juni 2022, 15:15
von __blackjack__
@SomePythonDude: Das ist wirklich komisch denn das sollte unabhängig vom Betriebssystem *nicht* funktionieren. Du hast da ein `requests.Response`-Objekt und versuchst das `sseclient.SSEClient()` als URL zu übergeben. Das Objekt benutzt diesen Wert als URL für einen weiteren `requests.get()`-Aufruf, was natürlich nicht geht.
Das `Response`-Objekt `socket` zu nennen, hilft sicher auch nicht wenn man anscheinend sowieso schon unsicher mit den Typen ist. Wobei auch ein Socket-Objekt falsch wäre wenn eine URL erwartet wird.
Re: Requests Error
Verfasst: Dienstag 14. Juni 2022, 17:56
von DeaD_EyE
Wird Zeit, dass alles auf 0 gesetzt wird. Dann braucht man auch diese dämlichen Abfragen nicht mehr!
Mir ist aufgefallen, dass man das response-Objekt nicht erstellen muss, da der sseclient das schon macht:
https://pypi.org/project/sseclient/
Code: Alles auswählen
from sseclient import SSEClient
messages = SSEClient('http://mysite.com/sse_stream/')
for msg in messages:
do_something_useful(msg)
bf4py:
https://github.com/joqueka/bf4py/blob/m ... ils.py#L90
Probier mal statdessen:
Und die Zeile 90 auskommentieren.