PHP HTTP請求

stream_context_createphp

一、curl仍然是最好的HTTP庫,沒有之一。 能夠解決任何複雜的應用場景中的HTTP 請求
2. 文件流式的HTTP請求比較適合處理簡單的HTTP POST/GET請求,但不適用於複雜的HTTP請求
3. PECL_HTTP擴展寫代碼更加簡潔,省事, 但成熟度很差,編程接口不統一,文檔和實例匱乏。 html

 

PHP模擬發送HTTP請求:編程

一、file_get_contents 發送get請求app

複製代碼
<?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);
 
複製代碼

 

二、經過CURL發送get請求curl

複製代碼
<?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);
複製代碼

三、經過fsocket發送get請求socket

複製代碼
/**
 * Socket版本
 * 使用方法:
 * $post_string = "app=socket&amp;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;
}
複製代碼
相關文章
相關標籤/搜索