標籤:htm 文檔 php url method fwrite creat encode 使用方法
stream_context_create
1、curl仍然是最好的HTTP庫,沒有之一。 可以解決任何複雜的應用情境中的HTTP 要求
2. 檔案流式的HTTP請求比較適合處理簡單的HTTP POST/GET請求,但不適用於複雜的HTTP請求
3. PECL_HTTP擴充寫代碼更加簡潔,省事, 但成熟度等級不好,編程介面不統一,文檔和執行個體匱乏。
PHP類比發送HTTP請求:
1、file_get_contents 發送get請求
<?php/** * 發送post請求 * @param string $url 請求地址 * @param array $post_data post索引值對資料 * @return string */function send_post($url, $post_data) { $postdata = http_build_query($post_data); $options = array( ‘http‘ => array( ‘method‘ => ‘POST‘, ‘header‘ => ‘Content-type:application/x-www-form-urlencoded‘, ‘content‘ => $postdata, ‘timeout‘ => 15 * 60 // 逾時時間(單位:s) ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); return $result;}
$post_data = array(‘username‘ => ‘abcdef‘,‘password‘ => ‘123456‘);send_post(‘http://xxx.com‘, $post_data);
2、通過CURL發送get請求
<?php$ch=curl_init(‘http://www.xxx.com/xx.html‘);curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);$output=curl_exec($ch);$fh=fopen("out.html",‘w‘);fwrite($fh,$output);fclose($fh);
3、通過fsocket發送get請求
/** * Socket版本 * 使用方法: * $post_string = "app=socket&version=beta"; * request_by_socket(‘blog.snsgou.com‘, ‘/restServer.php‘, $post_string); */function request_by_socket($remote_server,$remote_path,$post_string,$port = 80,$timeout = 30) {$socket = fsockopen($remote_server, $port, $errno, $errstr, $timeout);if (!$socket) die("$errstr($errno)");fwrite($socket, "POST $remote_path HTTP/1.0");fwrite($socket, "User-Agent: Socket Example");fwrite($socket, "HOST: $remote_server");fwrite($socket, "Content-type: application/x-www-form-urlencoded");fwrite($socket, "Content-length: " . (strlen($post_string) + 8) . "");fwrite($socket, "Accept:*/*");fwrite($socket, "");fwrite($socket, "mypost=$post_string");fwrite($socket, "");$header = "";while ($str = trim(fgets($socket, 4096))) {$header .= $str;}$data = "";while (!feof($socket)) {$data .= fgets($socket, 4096);}return $data;}
PHP HTTP請求