Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [PHP] Connessione HTTP

  1. #1
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940

    [PHP] Connessione HTTP

    Perchè il seguente codice mi va sovente (ma non sempre) in loop?

    Codice PHP:
    $plain_response "";

    $fp fsockopen("www.google.it"80);
        
    fputs($fp"GET /intl/it/about.html HTTP/1.1\r\n");
        
    fputs($fp"Host: w w w.google.it\r\n\r\n]");

        while (!
    feof($fp)) $plain_response .= fgets($fp);
    fclose($fp);

    echo 
    $plain_response
    (ho separato le tre "w" altrimenti questo forum inseriva un link...)

    Se uso lo header di richiesta Connection:close non va in loop. Ma Connection non serve ad inglobare entro una connessione TCP più HTTP? Perchè si blocca????

    [.:: JaguarXF ::.]
    __________________

  2. #2
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Su

    [.:: JaguarXF ::.]
    __________________

  3. #3
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    E ancora su.

    [.:: JaguarXF ::.]
    __________________

  4. #4
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    è una questione di protocollo HTTP.
    HTTP 1.1 prevede la possibilità di fare richieste multiple sullo stesso socket senza chiudere la connessione. Per http 1.1 questa è la situazione di default (Connection: persistent).
    Il tuo script non va in loop semplicemente il feof() non ritorna mai poichè deve essere il client a decidere di troncare la connessione. Con una connessione persistente il client riveve la risposta e quando questa è finita puo' farne un'altra o chiudere. Questo però pone dei problemi nel capire quando la risposta è finita... (leggi il link di sotto)
    Con Connection close (unico metodo per http 1.0) la connessione viene chiusa dopo la risposta del server.

    Se provi a fare un
    GET /intl/it/about.html HTTP/1.0

    vedrai che funziona perchè la connessione persistente non è supportata da http 1.1

    Leggiti anche questo:
    http://forum.html.it/forum/showthrea...hreadid=973481
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  5. #5
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Chiarissimo, ti ringrazio, ottima spiegazione.
    Quindi per aggiustare le poche righe di codice riportate dovrei uscire dal while se incontro una riga vuota seguita da uno zero, right?

    [.:: JaguarXF ::.]
    __________________

  6. #6
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Beh...ma qui c'è qualcosa che non mi quadra...

    Codice PHP:
    $plain_response "";

    $fp fsockopen("www.google.it"80);
      
    fputs($fp"GET /intl/it/about.html HTTP/1.1\r\n");
      
    fputs($fp"Host: w_w_w.google.it\r\n");
      
    fputs($fp"Connection: Close\r\n\r\n");

      while (!
    feof($fp))
        {
        
    $riga_risposta_http fgets($fp);
        
    $plain_response .= $riga_risposta_http

        
    $fd fopen("c:/tmp/my.txt","a");
          
    fwrite($fd,$riga_risposta_http);
        
    fclose($fd);
        }
    fclose($fp);

    echo 
    $plain_response
    PERCHE' IL FILE VIENE SCRITTO SOLO ALL'USCITA DEL while, ovvero se il while non termina perchè non metto Connection: Close, non vedo mai alcuna riga del file???

    [.:: JaguarXF ::.]
    __________________

  7. #7
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    Originariamente inviato da mark2x
    ....

    PERCHE' IL FILE VIENE SCRITTO SOLO ALL'USCITA DEL while, ovvero se il while non termina perchè non metto Connection: Close, non vedo mai alcuna riga del file???
    indendi a video?
    forse perchè fai l'echo solo fuori dal while???? :master:
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  8. #8
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Originariamente inviato da Habanero
    indendi a video?
    Beh, direi non a video, ma sul filesystem.............

    [.:: JaguarXF ::.]
    __________________

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.