Mit Curl request absetzen, response in csv schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LenThinker
User
Beiträge: 3
Registriert: Donnerstag 22. September 2022, 08:51

Hallo zusammen,

zunächst vorweg: ich bin Python Neuling.

Mein Problem: Ich habe einen RasPi in einem Netzwerk, welcher ein bestimmtes externes Portal über eine URL aufrufen soll.
Möchte ich im Firefox vom RasPi aus die Seite aufrufen funktioniert es nur manchmal. Hin und wieder kommt eine TimeOut Fehlermeldung. Ich habe auch schon eine Idee woran es liegen könnte (das ist jetzt hier aber nicht wichtig).

Kernfrage:
Wenn ich unter Ubuntu ein Terminal starte und "curl url-beispiel.hallo -vv" eingebe bekomme ich das Ergebnis der Anfrage angezeigt. Nun möchte ich für eine Analyse alle zwei Minuten über ein Python Skript automatisch eine Anfrage schicken und von dem Ergebnis die ersten drei Zeilen in eine csv Datei schreiben.
In erster Linie geht es mir aber um den Code, bzw. die Anfrage über das Python Skript. Ich weiß leider nicht, wie ich die curl Anfrage und die Antwort über ein Python Skript realisieren kann. Weiterhin weiß ich auch nicht so ganz, wie ich da googeln soll- und wirklich dramatisch komplex ist das Thema ja auch nicht...
Ich wäre sehr dankbar, wenn ihr mir einen Denkanstoß oder einen Tipp geben könnte.

Danke und freundliche Grüße!
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dazu benutzt man in Python das extra Modul requests, und BeautifulSoup für die Daten extraction.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: wenn ich die Frage richtig verstanden habe, geht es nicht um den Inhalt der Seite, sondern um die Debugausgabe von curl.

@LenThinker: statt ein externes Programm aufzurufen benutzt man am besten das passende Python-Modul, in Deinem Fall ist das `requests` für HTTP-Anfragen. Welche Information willst Du konkret in Deine csv-Datei schreiben?
LenThinker
User
Beiträge: 3
Registriert: Donnerstag 22. September 2022, 08:51

Danke für eure Antworten!
Ich bin einen großen Schritt weitergekommen. Mein Code sieht folgendermaßen aus:

import requests
response = requests.get("https:beispielurl")
print(response.status_code)
print(response.text.count)
i = response.text.split("\n")
ausgabe = i[0:4]
print(ausgabe)

Wie kann ich bei dem request als Parameter noch das -vv mitgeben? Weil darin finde ich dann meine nötigen Informationen...
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was sind denn konkret diese Informationen? Denn mitgeben kann man da kein -vv.
LenThinker
User
Beiträge: 3
Registriert: Donnerstag 22. September 2022, 08:51

Unter anderem, dass ein proxy erreichbar ist und aufgelöst werden konnte und eine IP-Adresse. Das sind nur zwei Informationen von vielen. Ich muss die Anfrage erweitern, damit ich die vollständigere Antwort bekomme. mit curl -vv übers Terminal bekomme ich halt mehr angezeigt, als mit dem was ich jetzt in dem Python Skript über die jetzige Anfrage bekomme
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann ist da im Zweifel doch curl die bessere Wahl. Mit dem subprocess.run call kannst du das aus Python aufrufen, und da gibt's auch Argumente, wie man an die Ausgabe kommt, etc pp.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@LenThinker: ja, an die ganzen Informationen kommt man über des response-Objekt, wir müssten nur wissen, was konkret.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ansonsten versuche es mal mit PycURL. Dessen Curl-Objekt (https://pycurl.io/docs/latest/curl.html) besitzt eine set_verbosity()-Methode. Das Modul selbst ist ein Wrapper für libcurl. Ob die Debugging-Ausgaben genau wie beim direkten Programmaufruf sind, kann ich aber nicht sagen. Das müsstest du dann mal selbst ausprobieren.
Antworten