2012-04-01 6 views
2

i mit fsock Post Variablen senden will finden, aber wenn ich versuche dies:fsock: Können nicht den Socket-Transport "http"

$post_arr = array ("a" => "b"); 
    $addr = 'http://1.2.3.4/confirmation.html'; 

    $fp = fsockopen($addr, 80, $errno, $errstr, 30); 
    if (!$fp) { 
     echo "$errstr ($errno)<br />\n"; 
    } else { 

     $req = ''; 
     foreach ($post_arr as $key => $value) { 
      $value = urlencode(stripslashes($value)); 
      $req .= "&" . $key . "=" . $value; 
     } 


     $header = "POST /cgi-bin/webscr HTTP/1.0\r\n"; 
     $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; 
     $header .= "Content-Length: " . strlen($req) . "\r\n\r\n"; 
     fwrite($fp, $header); 
     while (!feof($fp)) { 
      echo fgets($fp, 128); 
     } 
     fclose($fp); 
    } 

ich 'Kann nicht den Socket-Transport "http" finden' , irgendwelche ideen warum?

+0

Diese kleine Bibliothek kann Ihnen helfen, einfachere HTTP-Anfragen zu schreiben: https://github.com/jamm/HTTP –

+2

Sie sollten den 'http: //' -Teil weglassen, da der 'tcp:' -Transport standardmäßig ist benutzt. –

Antwort

7

fsockopen() öffnet eine Steckdose. Sockets wissen nichts über Layer5 + -Protokolle wie HTTP.

$fp = fsockopen('1.2.3.4', 80, $errno, $errstr, 30); 

einen bestimmten Weg zu bitten, es in der Anfrage senden: GET /confirmation.html
die Domäne angeben, in den Host Header senden: Host: 1.2.3.4


Sie mögen vielleicht mit den curl berücksichtigen Erweiterung. Es gibt normalerweise keinen Grund, HTTP-Anfragen manuell in PHP zu erstellen.

+0

Das hängt wirklich davon ab. Curl kann vorzuziehen sein, wird aber nicht immer installiert. Ich habe das in Paketen gesehen, die ich geschrieben und veröffentlicht habe. Curl fügt auch einige zusätzliche Gemeinkosten hinzu. – Peter

Verwandte Themen