***PHP請求服務curl以及json的解析

suboysugar發表於2015-07-22

   對於thinkphp框架,相信每一個php開發者都會有了解或者熟悉吧!前端很多都用的ajax的結合,前幾天遇到了一個問題,就是請求另一個服務,也就是請求一個介面,然後對方返回一個json串,一開始對curl不熟悉,導致自己的程式不能很順利的去處理請求服務後的json串!今天對curl又看了一下,問題解決了,現在就請求的的程式碼做如下顯示:
$new_url=”www.xxx.com”;
$requesturl=”http://192.168.1.100:1234/test/test?url=”.urlencode($new_url);
$ch = curl_init();
// 設定URL和相應的選項
curl_setopt($ch, CURLOPT_URL, $requesturl);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$info=curl_exec($ch);
// 關閉cURL資源,並且釋放系統資源
curl_close($ch);
//$info為請求服務後的內容,$info會因設定的引數的不同,接受不同的內容,總之,要清楚自己想要的結果,然後再進行選項配置。$info裡面並不一定是json串,要看服務的功能。若您請求的服務後,對方會給你返回json串的話,而你有需要將json串進行分解,那麼請做一下的操作,就可以得到每個key和value:
假設我們$info = `{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}`;
//對返回的json串進行decode,分解後與下面的陣列一起合成json串
$info = json_decode($info,true);
$a  = $info[`a`];
$b = $info[`b`];
…..
這樣就可以得到每個key和value了。至於一下你要做什麼,那就是自己的事情了!

 

第二次更新時間:2012年11月30日11:50:15

因為之前對php沒有過多的接觸,有另一個方式顯示服務的請求:
$new_url=”www.xxx.com”;
$requesturl=”http://192.168.1.100:1234/test/test?url=”.urlencode($new_url);
        $json_ret = file_get_contents($requesturl);
        $json_ret = mb_convert_encoding($json_ret, “UTF-8”, “gb2312”);//轉碼,(這裡只是個例子)
        $result = json_decode($json_ret, true);//將json串進行譯碼,前提是返回來的是被json_encode處理後返回的。

在用file_get_contents函式採集網站時,有時會遇到明明用瀏覽器可以看,但就是採不到內容的問題。下面說一下問題的原因,以及解決方法。下面先說一下User-Agent。User-Agent是Http協議中的一部分,屬於頭域的組成部分,通俗的講,User-Agent是一種向訪問網站提供你所使用的瀏覽器型別、作業系統、瀏覽器核心等資訊的標識。通過這個標識,使用者所訪問的網站可以顯示不同的排版從而為使用者提供更好的體驗或者進行資訊統計。比如對同一個網站(頁面)用PC和移動終端訪問展現的頁面佈局等一些資訊是不一樣的。下面說一些我們見到的問題:在用file_get_contents函式採集網站時,有時會遇到明明用瀏覽器可以看,但就是採不到內容的問題。這大概因為是伺服器上做了設定,根據 User_agent判斷是否為正常的瀏覽器請求,預設PHP的file_get_contents函式是不傳送UA的,如果要採集這樣的網站,我們就要讓PHP模擬瀏覽器傳送UA,這樣對方的伺服器就會以為我們是用瀏覽器是瀏覽,而返回正常的內容。
傳送UA方法很簡單,在使用file_get_contents函式前加上這一句:
ini_set(`user_agent`,`Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3`);對於Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3,可根據需要自行修改成其他的。加上這樣的頭設定,就不會出現那樣的問題。這也就是平時說的偽裝。

 

json_encode()/json_decode()學習連結:
     http://blog.csdn.net/nailwl/article/details/5687363
     http://cn2.php.net/json_decode
php中curl選項設定:
     http://www.cnblogs.com/c3055/archive/2011/08/18/2143832.html
     http://www.wapm.cn/phpdoc/zh/ref.curl.html
ini_set():
     http://hi.baidu.com/bing2liuliu/item/ee3abcbe6a302547ba0e12a0

wampserver中有的沒有選擇curl擴充套件,請點選:
http://blog.sina.com.cn/s/blog_6ce9e8870101bq0r.html進行配置

如何聯絡我:【萬里虎】www.bravetiger.cn
【QQ】3396726884 (諮詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/


相關文章