![]() |
Error 404 mit TIdHTTP
Ich habe ein Programm (-Feature) entwickelt, mit dem man von Spotify Metadaten von Playlisten übernehmen kann. Zu diesem Zweck verwende ich in der Spotify - 'Desktop-App' den 'Playlistlink', den Spotify für jede Spotify-Playlist bereithält, und den man per Kontextmenu ('Teilen') in die Zwischenablage kopieren kann. Beispiel:
![]() Aus dem Quelltext der damit verlinkten Seite entnehme ich die Links zu den einzelnen Tracks, wo ich dann die gesuchten Daten incl. Albumcover finde. Das funktionierte bisher alles einwandfrei. Seit ein paar Tagen jedoch bekomme ich völlig überraschend eine EIdHTTPProtocolException:'HTTP/1.1 404 Not Found' - Exception. So sieht der Aufruf aus:
Delphi-Quellcode:
Alle Properties von IdHTTP1 enthalten die Defaultwerte, nur 'HandleRedirects' habe ich auf true gestetzt.// IdHTTP1: TIdHTTP; // HTMLSource: String; // FActualClip: String; (enthält den aktuellen (Text-) Inhalt der Zwischenablage) try HTMLSource := IdHTTP1.Get(FActualclip); // Quelltext der Playlist- oder Album-Seite laden except On E:Exception do messageDlg(Format('Die Seite %s konnte nicht geladen werden.'#13#10#13#10 + '(%s:''%s'')',[FActualClip,E.ClassName,E.Message]), mtError,[mbOK],0); end; Mit dem Albumlink (z.B. ![]() Trotzdem interessiert mich, warum die bewährte Routine plötzlich nicht mehr funktioniert. Auch interessant: Wenn ich den Playlist-Link in Firefox oder MS Edge eingebe, wird die Seite gefunden, nicht jedoch vom MS IE11 oder Mozilla Seamonkey. Leider habe ich auf dem Gebiet der Web-Programmierung nur sehr wenig Ahnung. Kann mir irgendjemand einen Tipp geben, wo ich da suchen muss, bzw. wo ich weitere Informationen zum Thema finde? Gruß LP |
AW: Error 404 mit TIdHTTP
Hat sich evtl. der Aufbau der Seite verändert, so dass deine Methode zum Finden der einzelnen Links jetzt ungültige URLs liefert?
Das ist zumindest meistens der Grund für Fehler in der Lyric-Suche in meinem Player. ;-) |
AW: Error 404 mit TIdHTTP
Wenn ich im Browser auf
![]()
Delphi-Quellcode:
enthält, erhalte ich häufig Sorry, couldn't find that., als HTTP-Code also 404.
'https://open.spotify.com/playlist/'
Haben die da ein Problem und nicht Du? |
AW: Error 404 mit TIdHTTP
Zitat:
Zitat:
Gruß LP |
AW: Error 404 mit TIdHTTP
Welche Seite finden die bitte:
Die Tatsache, dass eine Fehlermeldung ausgegeben wird, ist nicht gleichbedeutend mit "Seite wurde gefunden". HTTP-Code 404 heißt: Das Gesucht gibt es nicht. HTTP-Code 404 heißt nicht: Es wird keine Ergebnisseite ausgegeben. Auf der Webkonsole zeigt mir auch der FireFox an, dass er als Ergebnis HTTP-Code 404 bekommt.
Code:
Der HTTP-Code ist ein nummerischer Wert, der vom Server geliefert wird, damit der Client entscheiden kann, wie mit der Antwort umzugehen ist.
https://open.spotify.com/playlist/621KN721wf1KvuZu8ZUgcw
GET https://open.spotify.com/playlist/621KN721wf1KvuZu8ZUgcw [HTTP/2.0 404 Not Found 171ms] GET https://open.scdn.co/cdn/build/open/open.3d087318.css [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/images/spotifylogo.a884cca3.svg [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/images/home-icon.ba66757a.svg [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/images/vinyl-top-layer.b56c3ccf.svg [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/images/vinyl-bottom-layer.82d9f6ef.svg [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/fonts/CircularSpUIv3T-Light.afd9ab26.woff2 [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/fonts/CircularSpUIv3T-Bold.8d0a45cc.woff2 [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/fonts/CircularSpUIv3T-Book.3466e0ec.woff2 [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/fonts/CircularSpUICyrOnly-Book.6a858994.woff2 [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/fonts/CircularSpUIAraOnly-Book.aaab109b.woff2 [HTTP/1.1 200 OK 0ms] GET https://open.scdn.co/cdn/fonts/CircularSpUIHbrOnly-Book.cb36b6ec.woff2 [HTTP/1.1 200 OK 0ms] ![]() Man kann auch grob sagen: Browser finden grundsätzlich nichts. Sie bitten jemanden, unter Angabe einer Url, etwas für sie zu suchen. Der Suchende gibt mit Hilfe des HTTP-Statuscode bekannt, ob er was gefunden hat und liefert ggfls. ein entsprechendes Ergebnis (z. B. in Form einer HTML-Seite) aus. Der Browser reagiert auf den HTTP-Statuscode. Wird im Fehlerfalle vom Suchenden eine anzeigbare HTML-Seite geliefert, so zeigt der Browser diese an, andernfalls generiert er selbst eine entsprechende Fehlermeldung. |
AW: Error 404 mit TIdHTTP
Mal von all dem abgesehen...warum nimmst du nicht die öffentlich verfügbare WebAPI?
Da kannst du ganz bequem per REST dir JSON-Daten zu allen möglichen holen: ![]() Ist auch relativ simpel und gut dokumentiert. |
AW: Error 404 mit TIdHTTP
Zitat:
Mein aktuelles Problem hatte ich ja eigentlich schon gelöst bzw. umgangen. Mich interessierte eben, wieso einige Browser eine Seite, die angeblich nicht existiert, dennoch ausgeben können :shock: Gruß LP |
AW: Error 404 mit TIdHTTP
Einige Browser zeigen bei einem HTTP-ErrorCode eine Fehlerseite an.
Andere Browser zeigen die Seite mit dem StatusCode nur an, wenn es keinen Kontent gibt. Jetzt könnte man als WebEntwickler gemein sein (oder doof) und trotz ausgabe eines Contents dennoch als Status 404 zurück geben. :angle2: Es kann aber auch sein, dass die Webseite (HTTP Header/JavaScript/...) eine Erkennung für Browser hat und je nach Browser.Model/Version ein bissl was anderes macht. Sowas kann sogar direkt im WebServer und nicht erst clientseitig sein, also Anhand der Browser-Kennung im Request-Header. Außerdem wird der gesamte "Inhalt" der genannten Webseite via JavaScript nachgeladen. Dein Download verarbeitet kein JavaScript, also bleibt da so oder so nur eine nutzlose HTML-Struktur übrig, selbst wenn du das 404-Problem behebst. Einzige "richtige" Lösung wäre z.B. eine zugängliche REST-API des Seitenbetreibers. Außerdem glaube ich kaum, dass der Seitenbetreiber das Runterladen, Parsen und Auslesen der Webseiten erlaubt. |
AW: Error 404 mit TIdHTTP
Die idhttp hat beim Request auch das Attribut UserAgent. Der Defaultwert dort ist nicht immer unbedingt geeignet. Da gibt es durchaus Server, die eine Kommunikation mit soeinem UserAgent ablehnen.
Gibt dort doch mal den Wert für einen der von Dir genutzten Browser, die die gewünschte Seite anzeigen, an. Dises Seite zeigt Dir den UserAgent des Browsers an, mit dem Du die Seite aufrufst: ![]() Den Wert kannst Du per Copy&Paste in Deine idHTTP-Komponente übernehmen. Eventuell machst Du Dir das aber auch konfigurierbar, so dass Du den UserAgent über eine Eingabe setzen kannst, damit bei einer erforderlichen Änderung dieses Wertes, das Programm nicht neu erstellt werden muss. |
AW: Error 404 mit TIdHTTP
Zitat:
![]() Gruß LP |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz