1. 程式人生 > >php 模擬http傳送請求三種方式(curl,stream流的方式,)

php 模擬http傳送請求三種方式(curl,stream流的方式,)

一,curl

cURL 是一個用來傳輸資料的工具,支援多種協議,如在 Linux 下用 curl 命令列可以傳送各種 HTTP 請求。PHP 的 cURL 是一個底層的庫,它能根據不同協議跟各種伺服器通訊,HTTP 協議是其中一種。

post請求

  • public static function http_post($url,$data_string,$timeout = 60)

  • {

  • //curl驗證成功

  • $ch = curl_init($url);

  • curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

  • curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string);

  • curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);

  • curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//// 跳過證書檢查

  • curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

  • curl_setopt($ch, CURLOPT_HTTPHEADER, array(

  • 'Content-Type: application/json',

  • 'Content-Length: ' . strlen($data_string)

  • ));

  • $result = curl_exec($ch);

  • if (curl_errno($ch)) {

  • print curl_error($ch);

  • }

  • curl_close($ch);

  • return $result;

  • }

GET請求

    public function doCurlGetRequest($url,$data,$timeout = 50){
        if($url == "" || $timeout <= 0){
            return false;
        }
       $url = $url.'?'.http_build_query($data);
        $con = curl_init((string)$url);
        curl_setopt($con, CURLOPT_HEADER, 0);
        curl_setopt($con, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout);

        $output = curl_exec($con);
        //釋放curl控制代碼
        curl_close($con);
        return $output;
    }

1,curl請求http

$url = '//www.jb51.net';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);

2,curl請求https

$url = 'https://www.jb51.net';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//這個是重點。
$data = curl_exec($curl);
curl_close($curl);
var_dump($data);

/**當請求https的資料時,會要求證書,這時候,加上下面這兩個引數,規避ssl的證書檢查

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證書和hosts

**/

二,stream流的方式

stream_context_create 作用:建立並返回一個文字資料流並應用各種選項,可用於 fopen(), file_get_contents() 等過程的超時設定、代理伺服器、請求方式、頭資訊設定的特殊過程。

post 例子

function post($url, $data)

{

$postdata = http_build_query(

$data

);//陣列轉化為路徑格式

$opts = array('http' =>

array(

'method' => 'POST',

'header' => 'Content-type: application/x-www-form-urlencoded',

'content' => $postdata

)

);

$context = stream_context_create($opts);

$result = file_get_contents($url, false, $context);

return $result;

}

三,socket方式

使用套接字建立連線,拼接 HTTP 報文傳送資料進行 HTTP 請求。

一個 GET 方式的例子:

<?php

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);

if (!$fp) {

echo "$errstr ($errno)<br />\n";

} else {

$out = "GET / HTTP/1.1\r\n";

$out .= "Host: www.example.com\r\n";

$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);

while (!feof($fp)) {

echo fgets($fp, 128);

}

fclose($fp);

}

?>

相關推薦

php 模擬http傳送請求方式curl,stream方式

一,curl cURL 是一個用來傳輸資料的工具,支援多種協議,如在 Linux 下用 curl 命令列可以傳送各種 HTTP 請求。PHP 的 cURL 是一個底層的庫,它能根據不同協議跟各種伺服器通訊,HTTP 協議是其中一種。 post請求 public

java程式碼利用RestTemplate模擬http傳送請求

我這邊用SpringBoot來配置RestTemplate 直接上程式碼,先是配置類 /** * Description: httpApiConfig, 用於restTemplate * User: zhouzhou * Date: 2018-09-14 * Time: 13:25 *

socket模擬http傳送請求

import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.S

【c++】模擬實現迴圈佇列 方法標識、浪費一個空間、計數器

什麼是迴圈佇列? 為充分利用向量空間,克服”假溢位“現象的方法:將向量空間想象為一個首尾相接的圓環,並稱這種向量為迴圈向量。儲存在其中的佇列稱為迴圈佇列(Circular Queue)。 假象成如圖: 但實際上儲存空間還是一段連續的空間。 空佇列: 當有元素入隊時:

OpenCV邊緣檢測演算法canny、sobel、laplacian

Canny演算法 #include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using namespace std; using namespace cv; //邊緣檢測 int mai

JavaScript中this關鍵字改變指向的方法apply、call、bind

首先,瞭解一下this關鍵字。this關鍵字就涉及到函式呼叫的內容。函式的幾種呼叫方式: 普通函式呼叫 作為方法來呼叫 作為建構函式來呼叫 使用apply/call方法來呼叫 Function.prototype.bind方法 ES6箭頭函式 但是不管

Linux風格Unix、BSD、GNU下的ps的引數說明

Linux系統中使用GNUps命令支援3種不同型別的命令列引數: Unix風格的引數,前面加單破折線; BSD風格的引數,前面不加破折線; GNU風格的長引數,前面加雙破折線。 Unix風格 其中-f顯示的完整格式輸出資訊有: UID:啟動這些

以太坊智慧合約中函式呼叫方法很重要!!!

外部呼叫: sendTransaction/call 函式呼叫一般分外部呼叫和內部呼叫兩種, 外部呼叫是通過JSON-RPC介面實現對合約函式的呼叫, 有3種呼叫方式: testInstance.testFunc.sendTransaction(); testInstance.testFun

php模擬http請求的兩姿勢

php http curl CURL$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$connectTimeout); curl_setop

php 遞迴函式的實現方式 php利用遞迴函式實現無限級分類

遞迴函式是我們常用到的一類函式,最基本的特點是函式自身呼叫自身,但必須在呼叫自身前有條件判斷,否則無限無限呼叫下去。實現遞迴函式可以採取什麼方式呢?本文列出了三種基本方式。理解其原來需要一定的基礎知識水品,包括對全域性變數,引用,靜態變數的理解,也需對他們的作用範圍有所理解。遞迴函式也是解決無限級分類的一個很

php中字串定義的方式

三種定義方式 單引號 雙引號 定界符<<< 單引號與雙引號的區別: $name='張三'; echo $name; 輸出 張三 $name="張三"; echo $name; 輸出 張三

as3+php上傳圖片的方式

這裡的三種方式分別為: 1、二進位制傳輸(BINARY) 2、字串傳輸(String) 3、檔案流上傳(File) 開發IDE:FlashDevelop、Zend Studio。 1)設定FlashDevelop使用flash player10(debug版

Java http 請求形式

JavaHttp介面互動的兩種方式     JavaHttp介面開發針對表單提交跟Json提交的兩種方式     表單提交(post、get)         get表單引數提交 /**      * @param type      * @param url     

java 模擬http傳送json請求

java中經常會用到模擬http請來發送各種訊息,比如說,有get請求,post請求,post請求的引數又包括一般引數和json引數,http工具程式碼如下:import java.io.BufferedReader; import java.io.IOException;

C#模擬http 傳送POST或GET請求

1、POST:   private string HttpPost(string Url, string postDataStr, CookieCollection cookies)        

php 構造httpphp模擬http請求 偽裝頭部資訊

http://jingyan.baidu.com/article/335530daafcd6019ca41c352.html <?php /** 構造 http 請求  */ $filename="http://sj.mjerp.com/dabenying

[php]模擬socket傳送GETPOST請求

模擬socket傳送GET,POST請求   作為php程式設計師一定會接觸http協議,也只有深入瞭解http協議,程式設計水平才會更進一步。最近我一直在學習php的關於http的程式設計,許多東西恍然大悟,受益匪淺。希望分享給大家。本文需要有一定http基

PHP模擬HTTP中的POST請求JSP網頁提交資料

今天我們來實現一個提交話費的WEB程式,主要應用在:代理電信公司話費交納。 第一步:獲取登入頁面的SESSION會話ID值.      為什麼要獲取SESSION值?      我們知道,使用者訪問一個網站時往往需要瀏覽許多網頁。對於一個通過PHP構築的網站來說,使用者在訪問的過程中需要執行許多的動態頁面

spring整合apache activemq實現訊息傳送方式程式碼配置例項

我們專案中傳送事件告警要用到訊息佇列,所以學習了下activemq,整理如下: activemq的介紹就不用說了,官網上大家可以詳細的看到。 1.下載並安裝activemq:地址http://activemq.apache.org/activemq-590-rel

獲取源代碼的方式

erer 方法 重載方法 option 允許 nal sta groups utf using System; using System.Collections.Generic; using System.IO; using System.Linq; using