it-swarm.com.de

wp_remote_get () ruft Seiten nicht richtig ab

Ich verwende wp_remote_get(), um verschiedene Seiten aus dem Web abzurufen. Es ist eine Nachrichtenseite.

Meistens funktioniert dies erfolgreich. Manchmal gibt die Anforderung jedoch Erfolg zurück (Code 200), aber der Inhalt der Seite unterscheidet sich von der Seite, die von einem Browoser abgerufen wird (der Inhalt der Seite, die mit diesem Aufruf zurückgegeben wird, entspricht in etwa dem Wert "Seite nicht gefunden" ")

Wenn ich jedoch einen Browser verwende, um die betreffende Seite abzurufen, wird die Seite erfolgreich zurückgegeben.

Hier ist ein Beispiel:

// The following returns code 200, yet the returned page is different from the acual page that is accessed via the browser
wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7");

HINWEIS: Zur Überprüfung habe ich mir die zurückgegebene Seite über PHP und den Quellcode der Seite über den Browser angesehen und sie sind unterschiedlich.

Ich bin mir nicht sicher, wo das Problem liegt. Ich vermute, es könnte etwas mit den Argumenten von wp_remote_get() zu tun haben, aber Dokumentation über Argumente ist nicht klar.

Sind es die Argumente? Wenn ja, was und wie richten Sie diese ein? Wenn nicht, was vermuten Sie das Problem?


WICHTIGES UPDATE UND LÖSUNG

Nachdem ich den Kommentar von zendka gelesen habe, in dem er angibt "Ich erhalte genau den gleichen Inhalt. Ich habe den Antworttext noch einmal überprüft und mit der Seitenquelle des Browsers verglichen. Sie sind identisch :) ", Mir ist etwas sehr wichtiges aufgefallen.

Die ursprüngliche URL, die in meinem Code in wp_remote_get() verwendet wurde, lautet http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا

Und der Anruf wäre wie

// Causes problems
wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا");

Die URL, die in dieser Frage verwendet und ursprünglich beschrieben wurde, lautete

// Runs successfully
wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7");

Beachten Sie die folgenden:

  1. Damit die URL mit wp_remote_get() funktioniert, ohne Probleme oder Fehler zu verursachen, sollte sie NICHT das folgende Format aufweisen: http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا, sondern wie folgt codiert sein: http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7.

  2. Der Grund, warum wp_remote_get() nicht mit http://www.aljazeera.net/news/international/2016/8/24/قتلى-ودمار-بزلزال-يضرب-وسط-إيطاليا arbeiten kann, ist, dass es nicht mit diesem utf8-Format umgehen kann. Damit dies ordnungsgemäß funktioniert, sollte nur der Pfad der URL in ein prozentual codiertes Format konvertiert werden. Darüber hinaus sollte kein Schrägstrich (/) im Pfad codiert werden, da andernfalls wp_remote_get() die Seite nicht finden kann. Daher erhalten wir einen Erfolgscode (200) mit 404 Seiteninhalten. Daher funktioniert dieses Format http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7 korrekt, wenn es an wp_remote_get() übergeben wird.

  3. Der Grund, warum ich die Formate falsch angegeben habe, ist, dass ich während meiner Tests die URL von Firefox kopiert und hier eingefügt habe. Firefox konvertiert die Formatierung automatisch in das "richtige" Format. Details hier: https://superuser.com/questions/480692/copying-unicode-symbols-from-firefox-address-bar-as-is

Die Lösung

  1. Überprüfen Sie, ob die URL das richtige Prozentformat aufweist

  2. Verwenden Sie die neu formatierte URL mit wp_remote_get()

Hilfreiche Ressourcen

https://github.com/neitanod/forceutf8

https://stackoverflow.com/questions/910793/detect-encoding-and-make-alles-utf-8

https://stackoverflow.com/questions/2742852/unicode-characters-in-urls

https://stackoverflow.com/questions/9831077/how-to-url-encode-only-non-ascii-symbols-of-url-in-php-but-leave-reserved-symbo

https://stackoverflow.com/questions/25465114/php-str-replace-not-working-with-special-chars

3
Greeso

Die von wp_remote_get() gesendete HTTP-Anfrage unterscheidet sich von der, die ein Browser sendet. ZB der user-agent ist anders (siehe Dokumentation ). Einige Websites reagieren darauf basierend unterschiedlich. Das zweite Argument von wp_remote_get() erlaubt es, die Anfrage zu ändern.

Websites können je nach IP-Adresse oder Anzahl der eingehenden Anfragen auch unterschiedlich reagieren (normalerweise durch Einschränkung oder Sperrung bestimmter Muster).

Übrigens, ich habe die von Ihnen erwähnte Seite getestet und sie funktioniert für mich:

wp_remote_get("http://www.aljazeera.net/news/international/2016/8/24/%D9%82%D8%AA%D9%84%D9%89-%D9%88%D8%AF%D9%85%D8%A7%D8%B1-%D8%A8%D8%B2%D9%84%D8%B2%D8%A7%D9%84-%D9%8A%D8%B6%D8%B1%D8%A8-%D9%88%D8%B3%D8%B7-%D8%A5%D9%8A%D8%B7%D8%A7%D9%84%D9%8A%D8%A7");
3
zendka