1. 程式人生 > >獲取頭http客戶端請求資訊(getallheaders)

獲取頭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 中文註釋