1. 我有移動提供的簡訊介面,請問怎麼用php調用這些介面發送簡訊呢
移動的介面是什麼風格的?是soap的還是自定義的?
調用自定義介面通常有以下步驟:
1、閱讀介面文檔
2、數據介面一般會提供一些參數。如果是GET介面,請將參數拼接在地址的後面(推薦使用
http_build_query)。如果是POST介面,看我的示例代碼。
3、請求數據
4、解析返回的內容,判斷調用是否成功。一般返回的內容有xml和json格式。
給你一個CURL調用POST介面的例子:
<?php
$ch=curl_init('省略介面地址,防止屏蔽');
//以下選項設為true,否則介面返回的內容會直接列印在頁面上
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
//連接超時,一定要設置
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
//連接成功後,請求超時,一定要設置
curl_setopt($ch,CURLOPT_TIMEOUT,5);
//使用POST請求
curl_setopt($ch,CURLOPT_POST,1);
//將參數POST過去,$post_data是你的參數組成的關聯數組
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
//提交請求,得到反饋
$response=curl_exec($ch);
//解析反饋的內容,略
如果是SOAP風格的,請查閱PHP文檔SoapClient類的用法。因為Soap規范不統一,使用其他語言實現的Soap可能和PHP不兼容。
以前我使用過移動夢網的介面(不是移動的介面),它提供兩種風格的API。它的Soap就和PHP不兼容。所以我選擇了自定義風格的API。
2. 如何用Curl 來post xml 數據
經過一番查找,終於找到了curl使用post的命令:
echo '<?xml version …>'|curl -X POST -H 'Content-type:text/xml' -d @- http://10.206.30.32:8081/loginregistration/register
其中圓擾橋<?xml version …>就是李乎要post的xml 文件,8081是私有埠。
例子:
Request:
echo '<?xml version="1.0" encoding="utf-8" ?><橘猛user>......</user>'|curl -X POST -H 'Content-type:text/xml' -d @- http://10.206.30.32:8081/loginregistration/register
Response:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user>......</user>
做相關判斷,就可以知道業務是否正常
3. php如何通過get方法發送http請求,並且得到返回的參數
這是一個跨域訪問問題,以前這種問題是比較復雜的。不過隨著XML josn等等數據結構的應用
現在還是很好解決的 而且你的要求也不高 只是一個返回值的話 都用不到數據結構了 直接頁面輸出就好了
我寫了兩個簡單的文件給你 裡面的域名和文件名參數 你都可以自己調整 我測試是沒問題的
//test.php
<?php
$ch = curl_init();
$str ='http://127.0.0.1/form.php?id=10';
curl_setopt($ch, CURLOPT_URL, $str);
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec($ch);
var_mp( $output );
?>
//頁面輸出結果 string(2) "10"
//form.php 文件內容如下
<?php
$id = $_GET['id'];
echo $id;
?>
4. 在 php curl返回
給你個我寫的curl方法。
/**
*curl模擬提交
*@param string $url 網址
*@param array/string $opt 提交參數
*@param string &$header 取回的頭信息
*@param string $redirect 是否重定向
*@param boolean $ssl 驗證https證書
*@return [type] 返回信息
*/
functioncurl($url,$opt='GET',&$header=null,$redirect=true,$ssl=false){
//初始化
$ch=curl_init($url);
//配置設置
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,$ssl);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,$ssl);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,$redirect);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); #返回結果
curl_setopt($ch,CURLOPT_HEADER,true); #顯示協議頭
if(is_array($opt)){
//轉小寫
$opt=array_change_key_case($opt,CASE_LOWER);
//POST
if(isset($opt['type'])&&strtoupper($opt['type'])=='POST'){
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,(isset($opt['data'])?$opt['data']:''));
}
//User-Agent
if(array_key_exists('ua',$opt))
curl_setopt($ch,CURLOPT_USERAGENT,$opt['ua']);
//Header
if(array_key_exists('header',$opt)){
curl_setopt($ch,CURLOPT_HTTPHEADER,(array)$opt['header']);
}
//Cookie
if(array_key_exists('cookie',$opt))
curl_setopt($ch,CURLOPT_COOKIE,$opt['cookie']);
//Referer
if(array_key_exists('referer',$opt))
curl_setopt($ch,CURLOPT_REFERER,$opt['referer']);
}else{
//僅POST
if(strtoupper((string)$opt)=='POST')
curl_setopt($ch,CURLOPT_POST,true);
}
$result=curl_exec($ch);
if(curl_errno($ch)){
$result=curl_error($ch);
}else{
//獲取頭長度
$length=curl_getinfo($ch,CURLINFO_HEADER_SIZE);
//取出頭信息
$header=substr($result,0,$length);
//去掉頭信息
$result=substr($result,$length);
}
//釋放
curl_close($ch);
return$result;
}
5. php curl的幾種用法
總結一下項目中用到curl的幾種方式 1. php curl的默認調用方法,get方式訪問url $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); //設置http頭 curl_setopt($ch, CURLOPT_ENCODING, "gzip" ); //設置為客戶端支持gzip壓縮 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30 ); //設置連接等待時間 curl_setopt($ch, CURLOPT_URL, $url ); curl_exec( $ch ); if ($error = curl_error($ch) ) {//出錯處理return -1;}fclose($fp); $curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //獲取http返回值 if( $curl_code == 200 ) { //正常訪問url}//異常 2. 設置http header支持curl訪問lighttpd伺服器Java代碼$header[]= 'Expect:'; $header[]= 'Expect:'; 3. 設置curl,只獲取http header,不獲取body:Java代碼curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_NOBODY, 1); 或者只獲取body:Java代碼curl_setopt($ch, CURLOPT_HEADER, 0); // make sure we get the body curl_setopt($ch, CURLOPT_NOBODY, 0); curl_setopt($ch, CURLOPT_HEADER, 0); // make sure we get the body curl_setopt($ch, CURLOPT_NOBODY, 0); 4. 訪問虛擬主機,需設置Host $header[]= 'Host: '.$host; 5. 使用post, put, delete等REStful方式訪問urlpost:curl_setopt($ch, CURLOPT_POST, 1 ); put, delete: curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); //或者PUT,需要伺服器支持這些方法。6. 保存下載內容為文件