fopen - HTTP request failed - GoogleImageCharts



  • Hallo,

    habe ein kleines Problem und ich weiß nicht mehr weiter.
    Ich beschäftige mich gerade mit GoogleImageCharts und es läuft auch ohne Probleme bei mir auf dem Rechner (XAMPP) und ich kann Charts erstellen.

    Auf dem Webspace läuft es leider nicht.

    <?php
      header('content-type: image/png');
      $url = 'https://chart.googleapis.com/chart?chid=' . md5(uniqid(rand(), true));
    
      $chart = array(
        'cht' => 'lc',
        'chs' => '600x200',
        'chd' => 't:5,10,15,10,20,25,30,40,35,30,45,60,70,65,60,80,85,90,85,80,95,100');
    
      $context = stream_context_create(array('http' => array('method' => 'POST','content' => http_build_query($chart),'header' => "Content-Type: application/x-www-form-urlencoded\r\n")));
      fpassthru(fopen($url, 'r', false, $context));
    ?>
    

    Ich erhalte hier jedesmal die Fehlermeldung HTTP request failed.
    Warning: fopen(https://chart.googleapis.com/chart?c...dc879209f2eef7) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request in ...testgic.php on line 20

    allow_url_fopen steht auf true(bzw 1) in der php.ini und openssl ist auch Aktiviert.

    In der Dokumentation hab ich diesen Hinweis gefunden: http://www.php.net/manual/en/function.fopen.php#95455

    if fopen() throws a E_WARNING "failed to open stream: HTTP request failed!" at you when opening a valid URL that you know returns data, i advise you to do the following before calling fopen($url,'r'):

    <?php
    ini_set ('user_agent', $_SERVER['HTTP_USER_AGENT']);
    ?>

    or anyways, set that 'user_agent' with ini_set() to something valid.

    leider ohne Erfolg, immernoch die Meldung HTTP request failed.

    Was mache ich falsch bzw. wo liegt der Fehler?
    Muss in der php.ini noch was eingestellt werden?

    Vielen Dank für eure Hilfe



  • Hallo,

    hatt keiner eine Idee woran es liegen könnte?
    Ich weis auch nicht mehr wonach ich suchen soll 😕



  • Iwann hab ich mich ja mal von PHP abgewandt. An sowas wie du da arbeitest, hab ich mich damals auch nciht rangewagt.

    Hast du iwie Zugriff auf den Request Header?(Edit: Natürlich hast du, kannst den auch mal posten?) Also genau den Text, der an google geht. Ein 400 sagt ja, dass iwas mit dem Header nicht stimmt, bzw. mit den darin enthaltenen oder nicht enthaltenen Angaben.

    Wird eine Hostangabe noch selbst dazugeneriert(iwo in "stream_context_create()")? Denn sonst solltest du die selbst angeben.

    Edit^2: was mir noch auffällt: das mit der Verschlüsselung(https) wird auch beachtet?



  • Gib statt der richtigen api-url ne url auf deinen rechner an und schau dir via Wireshark an was php da für nen Request baut.



  • Hallo,

    Gib statt der richtigen api-url ne url auf deinen rechner an und schau dir via Wireshark an was php da für nen Request baut.

    Auf meinem Rechner läuft es ja ohne Probleme(XAMPP) und es werden Charts dargestellt. Auf dem Webspace läuft es nicht und ich erhalte die Fehlermeldung "HTTP Request failed..." - würde es denn was bringen wenn ich mit WireShark mal nachschaue?

    Wenn ich die Daten per GET übergebe läuft es auch auf dem Webspace

    <?php
      header('content-type: image/png');
      $url = 'https://chart.googleapis.com/chart?';
      $url .= 'cht=lc&chs=150x100&chd=t:5,10,15,20,20,25,20,30,40,35,50';
    
      fpassthru(fopen($url, 'r', false));
    ?>
    

    Allerdings kann ich es so nicht machen da meine URL mehr als 2048 Zeichen enthällt. (Steht so in der Doku und auch schon ausprobiert) Deswegen möchte ich es per POST machen aber da läuft es nicht. In der Doku ist auch ein Beispiel für ein POST Request http://code.google.com/intl/en/apis/chart/image/docs/post_requests.html -> "Using PHP for a POST Request"
    aber wie gesagt "HTTP Request failed..." 😞

    Mir fällt hier nix mehr ein wo das Problem liegen könnte bzw. wonach ich suchen soll. 😕


Log in to reply