Heim  >  Artikel  >  Backend-Entwicklung  >  PHP verwendet stream_context_create(), um die POST/GET-Anforderungsmethode zu simulieren

PHP verwendet stream_context_create(), um die POST/GET-Anforderungsmethode zu simulieren

高洛峰
高洛峰Original
2017-01-06 15:10:221516Durchsuche

Das Beispiel in diesem Artikel beschreibt, wie PHP stream_context_create() verwendet, um POST/GET-Anfragen zu simulieren. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Manchmal müssen wir POST/GET und andere Anforderungen auf der Serverseite simulieren, das heißt, die Simulation im PHP-Programm implementieren um es zu tun? Mit anderen Worten: Wenn Ihnen in einem PHP-Programm ein Array gegeben wird, wie können Sie dieses Array an eine andere Adresse posten/erhalten? Natürlich geht das ganz einfach mit CURL, aber was ist, wenn Sie nicht die CURL-Bibliothek verwenden? Tatsächlich ist in PHP bereits eine verwandte Funktion implementiert, und diese Funktion ist stream_context_create(), über die ich als Nächstes sprechen werde.

Zeigen Sie sich den Code direkt an, so geht es am besten:

$data = array(
    'foo'=>'bar', 
    'baz'=>'boom', 
    'site'=>'localhost', 
    'name'=>'nowa magic'); 
$data = http_build_query($data); 
//$postdata = http_build_query($data);
$options = array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-type:application/x-www-form-urlencoded',
        'content' => $data
        //'timeout' => 60 * 60 // 超时时间(单位:s)
    )
);
$url = "http://localhost/test2.php";
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
echo $result;

Der Code für http://localhost/test2.php lautet:

$data = $_POST;
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
print_r( $data );
echo &#39;
';

Das laufende Ergebnis ist:

Array
(
  [foo] => bar
  [baz] => boom
  [site] => localhost
  [name] => nowa magic
)

Einige wichtige Punkte zur Erklärung:

1. Oben: Das Programm verwendet die Funktion http_build_query(). Wenn Sie mehr wissen möchten, lesen Sie den vorherigen Artikel „Wie PHP http_build_query() zum Erstellen einer URL-Zeichenfolge verwendet“.

2. stream_context_create() wird verwendet, um Kontextoptionen zum Öffnen von Dateien zu erstellen, z. B. den Zugriff mit POST, die Verwendung eines Proxys, das Senden von Headern usw. Erstellen Sie einfach einen Stream, geben wir ein weiteres Beispiel:

$context = stream_context_create(array(
    &#39;http&#39; => array(
        &#39;method&#39; => &#39;POST&#39;,
        &#39;header&#39; => sprintf("Authorization: Basic %s\r\n", base64_encode($username.&#39;:&#39;.$password)).
        "Content-type: application/x-www-form-urlencoded\r\n",
        &#39;content&#39; => http_build_query(array(&#39;status&#39; => $message)),
        &#39;timeout&#39; => 5,
    ),
));
$ret = file_get_contents(&#39;http://twitter.com/statuses/update.xml&#39;, false, $context);

3. Die von stream_context_create erstellten Kontextoptionen können für Streams oder Dateisysteme verwendet werden. Es ist nützlicher für Funktionen wie file_get_contents, file_put_contents und readfile, die direkt mit Dateinamen ohne Dateihandles arbeiten. Das Hinzufügen von Headern zu stream_context_create ist nur ein Teil der Funktion. Sie können auch Proxys, Timeouts usw. definieren. Dadurch ist die Funktion des Webzugriffs nicht schwächer als die von Curl.

4. Die Funktion von stream_context_create(): Erstellen Sie einen Textdatenstrom, geben Sie ihn zurück und wenden Sie verschiedene Optionen an, die für Timeout-Einstellungen, Proxyserver, Anforderungsmethoden und Header-Informationseinstellungen von fopen() verwendet werden können. file_get_contents() und andere spezielle Prozesse.

5. stream_context_create kann auch die Timeout-Verarbeitung von file_get_contents lösen, indem die Timeout-Option hinzugefügt wird:

$opts = array(
  &#39;http&#39;=>array(
  &#39;method&#39;=>"GET",
  &#39;timeout&#39;=>60,
 )
);
//创建数据流上下文
$context = stream_context_create($opts);
$html =file_get_contents(&#39;http://localhost&#39;, false, $context);
//fopen输出文件指针处的所有剩余数据:
//fpassthru($fp); //fclose()前使用

Mehr PHP verwendet stream_context_create(), um POST zu simulieren Für Artikel im Zusammenhang mit der /GET-Anfragemethode beachten Sie bitte die chinesische PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn