php-curl(類比post,設定header,接收json資料)__js

來源:互聯網
上載者:User
CURL類比POST請求

curl可以使用url的方式來類比瀏覽器傳輸資料,是很有用的一個功能。

curl的操作可以分為4步:

1、初始化:curl_init()2、設定屬性值:curl_setopt()3、執行:curl_exec()4、退出關閉:curl_close()

測試:
類比一個php檔案(2.php)向另一個php檔案(3.php)發送post請求,並接收其傳回值進行輸出的過程。

post發送方(2.php)

<?php $url = 'http://localhost/3.php';$opt_data = 'name=BY2&age=999&sex=MAXMAN';$curl = curl_init();  //初始化curl_setopt($curl,CURLOPT_URL,$url);  //設定urlcurl_setopt($curl,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);  //設定http驗證方法curl_setopt($curl,CURLOPT_HEADER,0);  //設定頭資訊curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);  //設定curl_exec擷取的資訊的返回方式curl_setopt($curl,CURLOPT_POST,1);  //設定發送方式為post請求curl_setopt($curl,CURLOPT_POSTFIELDS,$opt_data);  //設定post的資料$result = curl_exec($curl);if($result === false){    echo curl_errno($curl);    exit();}print_r($result);curl_close($curl);?>

post接收方(3.php)

<?php$name = $_POST['name'];$age = $_POST['age'];$sex = $_POST['sex'];if(empty($name) || empty($age) || empty($sex)){    return 'post value is empty';}$str = '歡迎來到北京,'.$name;$str .= ',你今年'.$age.'歲,真長壽';$str .= ',你是個強壯的'.$sex;echo $str;

測實驗證時,如果出現錯誤,會列印錯誤資訊。
如果測試過程中沒有出現錯誤,會列印如下資訊:

歡迎來到北京,BY2,你今年999歲,真長壽,你是個強壯的MAXMAN

curl中有一個方法curl_getinfo(),可以用來擷取一些有用的資訊,將這個方法加入到2.php中:

//插入到這個位置即可print_r($result);$info = curl_getinfo($curl);print_r($info);curl_close($curl);

再看一下現在的運行結果已經擷取到了許多有用的資訊:

歡迎來到北京,BY2,你今年999歲,真長壽,你是個強壯的MAXMANArray(    [url] => http://localhost/3.php    [content_type] => text/html    [http_code] => 200    [header_size] => 169    [request_size] => 150    [filetime] => -1    [ssl_verify_result] => 0    [redirect_count] => 0    [total_time] => 0    [namelookup_time] => 0    [connect_time] => 0    [pretransfer_time] => 0    [size_upload] => 27    [size_download] => 75    [speed_download] => 75    [speed_upload] => 27    [download_content_length] => 75    [upload_content_length] => 27    [starttransfer_time] => 0    [redirect_time] => 0    [certinfo] => Array        (        )    [redirect_url] => )

Comments:如果瀏覽器顯示亂碼,“自訂及控制”->”更多工具”->”編碼”->修改編碼方式即可(chrome)。 CURL設定Authorization頭資訊&發送接收JSON資料

相關的部份程式碼片段:

$opt_data = json_encode($data);$header = array();$header[] = 'Authorization:'.$tmp;$header[] = 'Accept:application/json';$header[] = 'Content-Type:application/json;charset=utf-8';$curl = curl_init();  //初始化curl_setopt($curl,CURLOPT_URL,$url);  //設定urlcurl_setopt($curl,CURLOPT_HTTPHEADER,$header);curl_setopt($curl,CURLOPT_POSTFIELDS,$opt_data);

在接收端,發現使用 POST是接收不到資料的,當然 _POST是接收不到資料的,當然_REQUEST也是一樣,那麼我們傳的JSON資料哪裡去了呢。怎麼才能接收到傳遞的JSON資料。

使用如下方法:$GLOBALS['HTTP_RAW_POST_DATA'];

為什麼會出現POST擷取不到傳送的資料的問題呢。因為$_POST只能接收文件類型為“Content-Type: application/x-www-form-urlencoded”格式提交的資料。
HTTP_RAW_POST_DATA是用來接收原始的POST資料的,只有在碰到未識別的MIME類型時才會被填充,所以使用它可以擷取到上面代碼POST的json資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.