WebClient downloaded leeren String

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von nafets3646.

    WebClient downloaded leeren String

    Ich habe gerade ein Problem mit der SpotifyLocalApi. Sobald ich versuche, sie aufzurufen (bei SpotifyAPI.GetOAuth()), krieg ich ne System.Net.WebException, welche mir mitteilt, dass der Server einen Fehler zurückgegeben hat (404). Also hab ich mal versucht, das Problem genauer zu untersuchen und hab mir die Source runtergeladen: Im Code kommt zwei Mal die Url https://embed.spotify.com/openplay/?uri=spotify:track:5Zp4SWOpbuOdnsxLqwgutt vor, welche, wenn man versucht, sie im Browser aufzurufen, 404 schmeißt. Nun ist also klar, wieso der Fehler geworfen wird.
    Meine Vermutung war nun, dass ich, wenn ich die Url durch eine gültige ersetzen würde (z.B. https://embed.spotify.com/openplay/?uri=spotify:track:5U727Qt3K2zj4oicwNJajj), alles wieder funktionieren müsste (die alte Url hat ja auch nur irgendeinen Track auf Spotify abgerufen, genauso wie die neue). Gesagt, getan - System.Exception (Could not find OAuth token) von der SpotifyLocalApi.
    Hier ergibt sich also mein Problem: An sich scheint alles ok zu sein (es gibt sogar ne passende Zeile im Quellcode der Url, mit welcher ich es probiert habe), allerdings findet die Funktion nichts.
    Ich habe auch schon versucht, den Code der Funktion in ein Testprojekt auszulagern, wo ich dann herausgefunden habe, dass der Fehler darin liegt, dass der Webclient nur einen leeren String downloaded.

    Hier ist jedenfalls mal der Code der Funktion (mit der abgeänderten Url):
    Code der Funktion

    C#-Quellcode

    1. public static string GetOAuth()
    2. {
    3. //Original Url: "https://embed.spotify.com/openplay/?uri=spotify:track:5Zp4SWOpbuOdnsxLqwgutt"
    4. string raw = new WebClient().DownloadString("https://embed.spotify.com/openplay/?uri=spotify:track:5U727Qt3K2zj4oicwNJajj");
    5. raw = raw.Replace(" ", "");
    6. string[] lines = raw.Split(new string[] { "\n" }, StringSplitOptions.None);
    7. foreach (string line in lines)
    8. {
    9. if (line.StartsWith("tokenData"))
    10. {
    11. string[] l = line.Split(new string[] { "'" }, StringSplitOptions.None);
    12. return l[1];
    13. }
    14. }
    15. throw new Exception("Could not find OAuth token");
    16. }

    Und der Quellcode hinter der neuen Url (die eigentlich gesuchte Zeile ist die Zeile 20)
    Quellcode

    HTML-Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html>
    3. <head>
    4. <style type="text/css">
    5. body {
    6. background-color: #373737;
    7. }
    8. .hidden {
    9. display: none;
    10. }
    11. </style>
    12. </head>
    13. <body>
    14. <iframe src="" id="util-iframe" class="hidden"></iframe>
    15. <script src="https://d2b1xqaw2ss8na.cloudfront.net/static/js/op.a686157.js"></script>
    16. <script>
    17. document.domain = 'spotify.com';
    18. var uri = 'spotify:track:5U727Qt3K2zj4oicwNJajj',
    19. tokenData = 'NAowChgKB1Nwb3RpZnkSABoGmAEByAEBJctDk1MSFL1AGkhZudFeYCuqktkKL324dS24',
    20. frameReferrer = document.referrer || '',
    21. firstTimePlaying = true,
    22. playlingTrackURI = null,
    23. startedPlay = false;
    24. function l(t) {
    25. $.ajax({url:'/l/?t=' + t + '&ref='+encodeURIComponent(frameReferrer)});
    26. }
    27. function onClientConnectionFailed(e) {
    28. SPR.removeClientConnectionFailedListener(onClientConnectionFailed);
    29. $('#util-iframe').attr('src', uri);
    30. SPR.playSpotifyURI(uri);
    31. }
    32. function onClientConnected(e) {
    33. SPR.removeClientConnectionFailedListener(onClientConnectionFailed);
    34. setTimeout(function() {
    35. if (!startedPlay) {
    36. startedPlay = true;
    37. SPR.playSpotifyURI(uri);
    38. };
    39. }, 2500);
    40. }
    41. function onPlayModeChanged(e) {
    42. if (!startedPlay && (!e.status || e.track.track_resource.uri != uri)) {
    43. startedPlay = true;
    44. SPR.playSpotifyURI(uri);
    45. } else if (!startedPlay && e.status && e.track.track_resource.uri == uri) {
    46. startedPlay = true;
    47. }
    48. if (firstTimePlaying && startedPlay && e.status) {
    49. firstTimePlaying = false;
    50. Set_Cookie('is_spotified', 'yes', 365, '/', '.' + document.domain, false);
    51. l(20);
    52. }
    53. }
    54. function Set_Cookie(name, value, expires, path, domain, secure) {
    55. var today = new Date();
    56. today.setTime( today.getTime() );
    57. if ( expires ) {
    58. expires = expires * 1000 * 60 * 60 * 24;
    59. }
    60. var expires_date = new Date( today.getTime() + (expires) );
    61. document.cookie = name + "=" +escape( value ) +
    62. ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
    63. ( ( path ) ? ";path=" + path : "" ) +
    64. ( ( domain ) ? ";domain=" + domain : "" ) +
    65. ( ( secure ) ? ";secure" : "" );
    66. }
    67. (function() {
    68. if (document.referrer == '' || document.referrer.split('/')[2].indexOf(document.domain) > 0) {
    69. SPR = SpotifyRemote.init(tokenData, '', function() {
    70. SPR.setReferrer(frameReferrer);
    71. SPR.addOnClientConnectionFailedListener(onClientConnectionFailed);
    72. SPR.addOnClientConnectedListener(onClientConnected);
    73. SPR.addPlayModeChangedListener(onPlayModeChanged);
    74. });
    75. }
    76. })();
    77. </script>
    78. </body>
    79. </html>

    Habt ihr ne Idee, wieso der WebClient nur nen leeren String downloaded und eventuell auch den Workaround? Würde mich über Tipps von euch freuen :).

    MfG Stefan
    @nafets3646

    So sollte es gehen:

    C#-Quellcode

    1. string url = "https://embed.spotify.com/openplay/?uri=spotify:track:5U727Qt3K2zj4oicwNJajj";
    2. WebClient wc = new WebClient();
    3. //you need to identify like a web browser
    4. wc.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
    5. MessageBox.Show(wc.DownloadString(url));


    Gruß
    Switcherlapp97
    RubiksCubeSolver


    Jetzt im Showroom