file_get_contents funktioniert für einige URLs nicht

Lesezeit: 5 Minuten

file get contents funktioniert fur einige URLs nicht
Parixit

ich benutze file_get_contents in PHP. Im folgenden Code in der ersten URL funktioniert es gut, aber der zweite funktioniert nicht.


$URL = "http://test6473.blogspot.com";
$domain = file_get_contents($URL);
print_r($domain);


$add_url= "http://adfoc.us/1575051";
$add_domain = file_get_contents($add_url);
echo $add_domain;

Irgendwelche Vorschläge, warum der zweite nicht funktioniert?

  • Was ist also die zweite URL, die tatsächlich widerhallt? Oder bekommst du irgendwelche Fehlermeldungen?

    – Mark Baker

    28. Juni ’13 um 11:25

  • Was meinst du mit “funktioniert nicht”?

    – Andrej Bestuzhev

    28. Juni ’13 um 11:25

  • Bitte öffnen Sie beide URLs im Browser. Beide geben HTML-Seite zurück.

    – Parixit

    28. Juni ’13 um 11:27

  • vielleicht haben sie Nicht-Browser-Anfragen blockiert 😛

    – Dino Babu

    28. Juni ’13 um 11:34

  • @DBK Wenn ja, gibt es eine andere Möglichkeit, dies zu tun?

    – Parixit

    28. Juni ’13 um 11:35

file get contents funktioniert fur einige URLs nicht
Parixit

URL, die von file_get_contents nicht abgerufen wird, da deren Server überprüft, ob die Anfrage vom Browser oder einem Skript stammt. Wenn sie eine Anfrage vom Skript gefunden haben, deaktivieren sie einfach den Seiteninhalt.

Damit muss ich eine Anfrage ähnlich einer Browseranfrage stellen. Also habe ich den folgenden Code verwendet, um den Inhalt der zweiten URL zu erhalten. Es kann für verschiedene Webserver unterschiedlich sein. Weil sie möglicherweise verschiedene Schecks halten.

Aber warum versuchen Sie nicht, den folgenden Code zu verwenden! Wenn Sie Glück haben, könnte dies für Sie funktionieren! !

function getUrlContent($url) {
    fopen("cookies.txt", "w");
    $parts = parse_url($url);
    $host = $parts['host'];
    $ch = curl_init();
    $header = array('GET /1575051 HTTP/1.1',
        "Host: {$host}",
        'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language:en-US,en;q=0.8',
        'Cache-Control:max-age=0',
        'Connection:keep-alive',
        'Host:adfoc.us',
        'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36',
    );

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);

    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

$url = "http://adfoc.us/1575051";
$html = getUrlContent($url);

Danke an alle für die Anleitung.

  • Und ich möchte auch erwähnen, dass die Datei get_contents keine Session startet oder Cookies setzt, was normalerweise von curl/Browsern gemacht wird.

    – Parixit

    30. Juni ’13 um 10:35

  • ist es nötig cookies.txt Datei sollte da sein?

    – Pathik Vejani

    16. Dezember ’15 um 6:45

  • @hnn Es ist nur notwendig, wenn URL die Sie aufrufen möchten, um ein Cookie im Browser zu verwalten.

    – Parixit

    16. Dezember ’15 um 6:51

  • Dies funktionierte bei mir, als ich keine Antwort auf einen Anruf bei Google Maps mit etwas wie erhielt maps.googleapis.com/maps/api/geocode/…

    – TechyGypo

    31. August ’18 um 8:44

file get contents funktioniert fur einige URLs nicht
fquinner

Leider sieht es so aus, als ob die zweite Site den Zugriff von nicht erkannten Browsern blockiert. Auch die Verwendung von curl über die Befehlszeile funktioniert nicht:

curl -I http://adfoc.us/1575051

gibt:

HTTP/1.1 200 OK
Server: cloudflare-nginx
Date: Fri, 28 Jun 2013 12:15:40 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.5.0
Set-Cookie: __cfduid=d7cd1bf18c136a288cc2b36065a3b31f01372421740; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.adfoc.us
CF-RAY: 85a4dc6829e06d0

aber kein Inhalt. Beachten Sie, dass der Status 200 zurückgegeben wird. Wenn Sie also den zurückgegebenen String auf boolean === false überprüfen, um festzustellen, ob er fehlgeschlagen ist, wird es tatsächlich so aussehen, als ob es funktioniert hätte.

Wenn Sie den Useragent (und möglicherweise andere Dinge) fälschen müssen, um zu versuchen, die URL dazu zu bringen, Ihre Anfrage zu akzeptieren, müssen Sie den Sprung mit den curl-Bibliotheken wagen und verschiedene Kombinationen ausprobieren, um zu versuchen, dass es funktioniert. Zu testen, was zuerst mit der curl-Befehlszeile funktioniert, wäre auch eine gute Möglichkeit, die Entwicklungszeit bei der Untersuchung dieses Problems zu verkürzen.

Hier ist jemand, der das schon einmal durchgemacht hat:

php curl: Wie kann ich eine Get-Anfrage genau wie einen Webbrowser emulieren?

  • Danke für die Antwort. Ich habe versucht, die URL einer anderen Antwort anzugeben. Aber es funktioniert immer noch nicht. 🙁

    – Parixit

    28. Juni ’13 um 12:24

  • Leider ist jede Website anders – Sie müssen möglicherweise mit einer Vielzahl verschiedener http-Header experimentieren, bevor Sie einen erhalten, den die Website akzeptiert … oder es funktioniert einfach nie … oder Sie benötigen möglicherweise sogar Spoofing mit Cookie-Unterstützung. Leider ist hier nur Versuch und Irrtum möglich – so etwas wird immer schwieriger 🙁

    – fquinner

    28. Juni ’13 um 12:35

sieht so aus, als ob die zweite URL manchmal zu langsam antwortet, möglicherweise Weiterleitungen. Versuchen Sie, curl zu verwenden, und stellen Sie ein größeres Timeout ein. Schalten Sie auch Fehler ein

error_reporting(-1);
ini_set('display_errors','On');

1641733683 555 file get contents funktioniert fur einige URLs nicht
Deepak-Entwickler

du kannst diesen Code auch ausprobieren

<?php

function getUrlContent($url) {
    $parts = parse_url($url);
    $host = $parts['host'];
    $ch = curl_init();
    $header = array('GET /1575051 HTTP/1.1',
        "Host: {$host}",
        'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language:en-US,en;q=0.8',
        'Cache-Control:max-age=0',
        'Connection:keep-alive',
        'Host:adfoc.us',
        'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36',
    );

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

$url = "https://news.google.com/rss/search?q=apple&hl=en-IN&gl=IN&ceid=IN:en";
$html = getUrlContent($url);

$xml = simplexml_load_string($html);
$json = json_encode($xml);
$array = json_decode($json,TRUE);


print_r($array);
?>

.

212360cookie-checkfile_get_contents funktioniert für einige URLs nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy