***PHP請求服務curl以及json的解析
對於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/
相關文章
- PHP curl 請求PHP
- PHP與Curl採用的GET,POST,JSON方式請求APIPHPJSONAPI
- PHP curl 請求使用教程PHP
- PHP 請求用 cURL 還是用 guzzle?PHP
- php curl 連線 EMQ http_api的請求PHPMQHTTPAPI
- 谷歌翻譯使用php curl請求介面文件谷歌PHP
- cURL實現傳送Get和Post請求(PHP)PHP
- 【PHP】一次請求過程的解析PHP
- php用curl封裝一個http請求類(鏈式呼叫)PHP封裝HTTP
- go語言請求http介面示例 並解析jsonGoHTTPJSON
- 前端傳送的請求,是如何請求到後端服務的?前端後端
- 【PHP-FPM】一次請求過程的解析PHP
- linux用curl傳送post請求Linux
- curl 傳送 POST 請求的四種方式
- SpringBoot系列之服務端解析客戶端國際化請求Spring Boot服務端客戶端
- SSRF 服務端請求偽造服務端
- dio+json_serializable從網路請求到資料解析JSON
- unity3d c# http 請求json資料解析Unity3DC#HTTPJSON
- shell指令碼:批次傳送curl請求指令碼
- curl 請求獲取響應時間
- Linux curl 命令模擬 POST/GET 請求Linux
- 使用 HTTP PUT, PATCH 以及 MERGE 請求消費 SAP ABAP OData 服務修改操作HTTP
- 封裝 PHP curl http 請求 (全) Composer 安裝 httpbuilder,支援 GET,POST,PUT,DELETE封裝PHPHTTPUIdelete
- fastHttp服務端處理請求的過程ASTHTTP服務端
- Nacos - 服務端處理心跳請求服務端
- Flutter基礎(十一)網路請求(Dio)與JSON資料解析FlutterJSON
- Flutter 基礎(十一)網路請求(Dio)與 JSON 資料解析FlutterJSON
- Redis(一):服務啟動及基礎請求處理流程原始碼解析Redis原始碼
- Spring對JSON請求加解密SpringJSON解密
- php服務端處理json和陣列的組合PHP服務端JSON陣列
- Netty整合SpringMVC,實現高效的HTTP服務請求NettySpringMVCHTTP
- Nacos - 服務端處理註冊請求服務端
- spring cloud gateway 原始碼解析(3)記錄請求引數及返回的jsonSpringCloudGateway原始碼JSON
- wireshark抓包curl傳送http2請求HTTP
- 求助:curl post請求被返回了 302 重定向
- SpringSecurity原理解析以及CSRF跨站請求偽造攻擊SpringGse
- 封裝curl_multi讓請求與業務邏輯並行執行封裝並行
- openstack基礎構架以及服務方式解析
- php請求API介面方法PHPAPI