標籤:php ip curl ajax api
本文與《【Servlet】Javaweb中,利用新浪api介面,擷取IP地址,並擷取相應的IP歸屬地》(點擊開啟連結)為姊妹篇,只是後端程式設計語言換成了php。
做出同樣的效果,開啟頁面,得到用戶端的ip,並擷取利用新浪api介面擷取此ip的歸屬地。
可以看到,在IE6也是相當正常的。
目錄結構如下,非常簡單,同樣就兩個檔案,其實如果你願意,寫成一個php檔案也可以,但是顯示層和邏輯業務層還是不混在一起為好吧?
唯一值得注意的是,這兩個檔案打死也不能一個叫ipGet.php,ipGet.html,雖然尾碼名是不同的,但首碼一定不能相同,
否則IE6不知為何無法應答這個Json
ipGetView.html與《【Servlet】Javaweb中,利用新浪api介面,擷取IP地址,並擷取相應的IP歸屬地》(點擊開啟連結)中的顯示層頁面是完全相同,新浪api介面也是完全相同的,這裡不再贅述。
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Javaweb-IP查詢</title></head><body><p>IP:<span id="ip"></span></p><p>IP歸屬地:<span id="area"></span></p></body></html><script>//建立Ajax對象,不同瀏覽器有不同的建立方法,其實本函數就是一個簡單的new語句而已。 function createXMLHttpRequest() {var XMLHttpRequest1;if (window.XMLHttpRequest) {XMLHttpRequest1 = new XMLHttpRequest();} else if (window.ActiveXObject) {try {XMLHttpRequest1 = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {XMLHttpRequest1 = new ActiveXObject("Microsoft.XMLHTTP");}}return XMLHttpRequest1;}function ajax() {var XMLHttpRequest1 = createXMLHttpRequest();//指明相應頁面 var url = "ipGetDo.php";XMLHttpRequest1.open("POST", url, true);//這裡沒法解釋,你所有JavaScript的要求標頭都這樣寫就對了,不會亂碼 XMLHttpRequest1.setRequestHeader("Content-Type","application/x-www-form-urlencoded");XMLHttpRequest1.send(null);//對於返回結果怎麼處理的問題XMLHttpRequest1.onreadystatechange = function() {//這個4代表已經發送完畢之後 if (XMLHttpRequest1.readyState == 4) {//200代表正確收到了返回結果 if (XMLHttpRequest1.status == 200) {//json返回結果var data=eval("("+XMLHttpRequest1.responseText+")");document.getElementById("ip").innerHTML=data.ip;document.getElementById("area").innerHTML=decodeURIComponent(data.area1)+decodeURIComponent(data.area2);} else {//如果不能正常接受結果,你肯定是斷網,或者我的伺服器關掉了。 alert("網路連接中斷!");}}};}ajax();</script>
之後,ipGetDo.php中,如同《【php】登入系統與輸出瀏覽者資訊》(點擊開啟連結)一樣,利用${_SERVER[‘REMOTE_ADDR‘]}先擷取使用者的ip,然後通過curl向遠程擷取資料。php用curl向遠程擷取資料的格式如下:
<?php $url = "需要擷取資料的url"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10); $DistanceContent = curl_exec($ch); echo $DistanceContent; //$DistanceContent為擷取到的資料?>
因此ipGetDo.php的代碼也就如下,擷取到資料,直接列印出來,讓ipGetView.html用Ajax擷取即可。
<?php $url = "http://ipapi.sinaapp.com/api.php?f=json&ip=${_SERVER['REMOTE_ADDR']}"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10); $DistanceContent = curl_exec($ch); echo $DistanceContent; ?>
【php】利用新浪api介面與php擷取遠端資料的方法,擷取IP地址,並擷取相應的IP歸屬地