獲取頭http客戶端請求資訊(getallheaders)
介面互動中由於Ios和Android的作業系統和語言不同 所以有時候需要根據頭資訊的不同 來對不同客戶端進行處理 在獲取伺服器頭資訊時 發生了詭異的故事
如你所想 在PHP手冊中有這樣幾個函式去抓取http頭資訊 比如get_headers ,getallheaders 但它沒有展示出我想要的User-Agent資訊
<?php
print_r(get_headers('http://www.baidu.com'));
//列印結構如下
Array
(
[0] => HTTP/1.1 200 OK
[1] => Server: Tengine
[2] => Date: Fri, 10 Mar 2017 10:02:08 GMT
[3] => Content-Type: text/html; charset=utf-8
[4] => Connection: close
[5] => Vary: Accept-Encoding
[6] => X-Powered-By: PHP/5.6.19
)
getallheaders並沒有什麼卵用 爆出了淡淡的Fatal error….檢視手冊發現函式是Apache下才支援的函式 而我的伺服器環境是nginx
所以使用超全域性變數$_SERVER
/**
** @todo 接收頭資訊
** @params by tangtang
**/
public function em_getallheaders()
{
foreach ($_SERVER as $name => $value)
{
if (substr($name, 0, 5) == 'HTTP_')
{
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name , 5)))))] = $value;
}
}
return $headers;
}
//在使用正則檢查下字串
if($demandInfo['new_status'] == Api_Crm_SystemConfig::DEMAND_STATUS_WAIT_ALLOT ){
$headers = $this->em_getallheaders();
$bool = preg_match("/android/i",$headers['User-Agent']);
if($bool == TRUE){
$result['telephone']=substr($result['telephone'],0,3).str_repeat('*',8);
}else{
$this->code_back('104');
}
}
這樣就很輕鬆的辨別出客戶端的使用者資訊 根據不同的客戶端做出不同的處理 ~
Android
Ios展示效果
相關推薦
獲取頭http客戶端請求資訊(getallheaders)
介面互動中由於Ios和Android的作業系統和語言不同 所以有時候需要根據頭資訊的不同 來對不同客戶端進行處理 在獲取伺服器頭資訊時 發生了詭異的故事 如你所想 在PHP手冊中有這樣幾個函式去抓取http頭資訊 比如get_headers ,get
Socket實現簡單的指定客戶端傳送資訊(C#)
Socket實現簡單的指定客戶端傳送資訊(效果如下圖) 不多說了,直接上程式碼: server端: using System; using System.Collections.Generic; using System.Linq; usi
跟著大彬讀原始碼 - Redis 2 - 伺服器如何響應客戶端請求?(上)
上次我們通過問題“啟動伺服器,程式都幹了什麼?”,跟著原始碼,深入瞭解了 Redis 伺服器的啟動過程。 既然啟動了 Redis 伺服器,那我們就要連上 Redis 服務幹些事情。這裡我們可以通過 redis-cli 測試。 現在客戶端和伺服器都準備好了,那麼Redis 客戶端和伺服器如何建立連線?伺服器又是
跟著大彬讀原始碼 - Redis 3 - 伺服器如何響應客戶端請求?(下)
繼續我們上一節的討論。伺服器啟動了,客戶端也傳送命令了。接下來,就要到伺服器“表演”的時刻了。 1 伺服器處理 伺服器讀取到命令請求後,會進行一系列的處理。 1.1 讀取命令請求 當客戶端與伺服器之間的套接字因客戶端的寫入變得可讀時,伺服器將呼叫命令請求處理器執行以下操作: 讀取套接字中的命令請求,並將其儲
nodejs HTTP伺服器專題(四)-獲取客戶端請求資訊
(1.理論知識) 客戶端請求資訊包括如下: Method: GET,POST Url: path Headers:請求頭 httpVersion: http版本(1.0和1.1) socket:Socket 物件 Data:客戶端傳過來的資料 過濾圖示請求
java程式碼中得到本地ip地址。獲取客戶端請求IP(終端使用者的網際網路或內網IP地址)
private static String getLocalIP() throws Exception{ String localIP = ""; InetAddress addr = (InetAddress) InetAddress.getLocalHos
http 客戶端錯誤資訊
訊息: 描述: 400 Bad Request 伺服器未能理解請求。 401 Unauthorized 被請求的頁面需要使用者名稱和密碼。 402 Payment Re
http客戶端請求
注:主要是用於呼叫介面使用的http請求方法,分為post和get倆種。 HttpClient和HttpsURLConnection的區別: /*** 直接訪問請求時可以用HttpsURLConnection,但* 可能需要使用者登入而且具有相應的許可權才可訪問該頁面。*
獲取客戶端真實IP(轉)
@RequestMapping(value=”/test”) @ResponseBody public void test1(HttpServletRequest request,Questionnaire quest,String que
無線 iphone客戶端測試白皮書(三)
同名 一次 消息推送 自動跳轉 資源 快速 簡單 通訊 一個數據庫 7 、 PUSH 測試 1) 檢查 push 消息是否按照指定的業務規則發送 2) 檢查不接受推送消息時,檢查用戶不會再接收到 push. 3) 如果用戶設置了免打擾的時間段,檢查在免打擾時間段內,用戶接收
Spring Cloud Ribbon(客戶端負載均衡)(2)
1.引數配置 對於Ribbon的引數配置通常有兩種方式:全域性配置以及指定客戶端配置: 全域性配置:ribbon.<key>=<value>格式進行配置即可。<key>代表了Ribbon客戶端配置的引數名,<value>代表了對應引數值。比
unity3D-----------socket客戶端、伺服器(簡單)
利用socket簡單的實現,客戶端和伺服器之間的通訊。 客戶端: using UnityEngine; using System.Collections; using System.Text; using System.Net; using System.Net.Soc
oracle無客戶端連線資料庫(C#)
前提: 1. 不安裝oracle的客戶端 2. 不需要配置ora檔案 3. C# 實現 既然是C#實現,當然就要去找oracle的連線庫了,主要有三種方式: 1. 微軟提供的System.Data.OracleClient已經過時了,不推薦使用了 2. Or
dubbo-php-framework的客戶端api解析(一)
從這篇,我們開始分析客戶端的側的流程,所謂客戶端就是指dubbo-php-frame框架中consumer端,我們結合demo來看看consumer的呼叫流程,下面程式碼路徑為dubbo-php-framework-master/demo/demo-consumer/serv
dubbo-php-framework的客戶端api解析(二)
這篇我們開始解析ProxyFactory的流程,這個類重點完成了客戶端生成代理的流程,其路徑為dubbo-php-framework-master/consumer/proxy/ProxyFactory.php,我們接著dubbo-php-framework的客戶端api解析
dubbo-php-framework的客戶端api解析(三)
這篇我們分析生成Proxy後的處理流程,接著前面一篇文章,我們可以看到有p2p和register模式,這兩種模式最大的區別是服務地址資訊從哪裡獲取,而proxy的處理流程卻是一直的。 public static function newProxyInstance($ser
ZooKeeper的Java客戶端工具使用(Curator)
安裝 <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-client</artifactId> <vers
Redis的Java客戶端工具使用(Jedis)
安裝 引入Maven依賴 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <versio
Eureka客戶端初始化(4)
10. 上接RetryableEurekaHttpClient#execute,繼續執行clientFactory.newClient(currentEndpoint);返回的是new RedirectingEurekaHttpClient(endpoint.getServi
配置中心 Apollo 原始碼解析 —— 客戶端 API 配置(三)之 ConfigFile
������關注微信公眾號:【芋道原始碼】有福利: 1. RocketMQ / MyCAT / Sharding-JDBC 所有原始碼分析文章列表 2. RocketMQ / MyCAT / Sharding-JDBC 中文註釋