朴愿一家人 發表於 2020-12-11 23:41:00

uni-app无法设置Request请求头Referer解决办法

<h1>uni-app Request请求设置请求头Referer参数</h1>
<p>首先看到uni-app官网提供的文档来看是不支持伪造或修改请求头中的Referer参数的,但我们也有一种解决这个问题的办法。</p>
<p><img src="https://img2020.cnblogs.com/blog/1885551/202012/1885551-20201211233421883-378984870.png" alt="" loading="lazy"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>&nbsp;解决办法:</h2>
<p>我这里先说一下解决思路,前端没法设置Header中的Referer但不代表后端不能伪造请求头呀。我们的解决思路就是通过后端服务器做一次转发,在转发的时候伪造请求头来实现,再把结果返回给前端。</p>
<p>思路明确,下面我用PHP来做演示其它语言自行实现。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * url转发接口,可用于快应用微信H5支付
   * @Route("/transpondUrl")
   * @param Request $request
   * @return Response
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
    <span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span> transpondUrlAction(Request <span style="color: rgba(128, 0, 128, 1)">$request</span><span style="color: rgba(0, 0, 0, 1)">){
      </span><span style="color: rgba(128, 0, 128, 1)">$url</span> = <span style="color: rgba(128, 0, 128, 1)">$request</span>-&gt;get("url");<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取接口传入需要转发的url注意需要用url编码。由于基于Symfony框架实现$request可以直接获取url参数,原生可用$_GET['url']代替</span>
      <span style="color: rgba(128, 0, 128, 1)">$userAgent</span> = <span style="color: rgba(128, 0, 128, 1)">$request</span>-&gt;headers-&gt;get("user-agent"<span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$url</span>) or <span style="color: rgba(128, 0, 128, 1)">$url</span> == "") <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Response("参数不完整。"<span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 0, 255, 1)">empty</span>(<span style="color: rgba(128, 0, 128, 1)">$userAgent</span>)) <span style="color: rgba(128, 0, 128, 1)">$userAgent</span> = <span style="color: rgba(128, 0, 128, 1)">$this</span>-&gt;<span style="color: rgba(0, 0, 0, 1)">getAgent();
      </span><span style="color: rgba(128, 0, 128, 1)">$ch</span> =<span style="color: rgba(0, 0, 0, 1)"> curl_init();
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(0, 128, 128, 1)">preg_match</span>("/^https:\\/\\/.+/",<span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">)) {
            curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_SSL_VERIFYPEER, 0<span style="color: rgba(0, 0, 0, 1)">);
            curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_SSL_VERIFYHOST, 0<span style="color: rgba(0, 0, 0, 1)">);
      }
      </span><span style="color: rgba(128, 0, 128, 1)">$cip</span> = <span style="color: rgba(128, 0, 128, 1)">$request</span>-&gt;<span style="color: rgba(0, 0, 0, 1)">getClientIp();
      curl_setopt (</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_URL, <span style="color: rgba(128, 0, 128, 1)">$url</span><span style="color: rgba(0, 0, 0, 1)">);
      curl_setopt (</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_USERAGENT, <span style="color: rgba(128, 0, 128, 1)">$userAgent</span><span style="color: rgba(0, 0, 0, 1)">);
      @curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_FOLLOWLOCATION, 1<span style="color: rgba(0, 0, 0, 1)">);
      curl_setopt (</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_TIMEOUT, 60<span style="color: rgba(0, 0, 0, 1)">);
      curl_setopt (</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_AUTOREFERER, 1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">      curl_setopt ($ch, CURLOPT_COOKIEJAR, './cookie.txt');// cookie日志</span>
      curl_setopt (<span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_REFERER, "{你需要设置伪造的referer}"<span style="color: rgba(0, 0, 0, 1)">);
      curl_setopt(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_HTTPHEADER, ["CLIENT-IP:<span style="color: rgba(128, 0, 128, 1)">$cip</span>"<span style="color: rgba(0, 0, 0, 1)">]); // 这里设置客户端IP
      curl_setopt (</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_HEADER,1);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">显示返回的HEAD区域的内容</span>
      curl_setopt (<span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_RETURNTRANSFER, 1<span style="color: rgba(0, 0, 0, 1)">);
      curl_setopt (</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_FOLLOWLOCATION, 1<span style="color: rgba(0, 0, 0, 1)">);
      curl_setopt (</span><span style="color: rgba(128, 0, 128, 1)">$ch</span>, CURLOPT_TIMEOUT, 10<span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(128, 0, 128, 1)">$result</span> = curl_exec(<span style="color: rgba(128, 0, 128, 1)">$ch</span><span style="color: rgba(0, 0, 0, 1)">);
      curl_close(</span><span style="color: rgba(128, 0, 128, 1)">$ch</span><span style="color: rgba(0, 0, 0, 1)">);
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Response(<span style="color: rgba(128, 0, 128, 1)">$result</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 返回响应内容</span>
<span style="color: rgba(0, 0, 0, 1)">    }

    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getAgent() // 设置浏览器的标识
    {
      </span><span style="color: rgba(128, 0, 128, 1)">$agentarry</span> =<span style="color: rgba(0, 0, 0, 1)"> [
            </span>"iPhone11"                        =&gt;       "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.18 NetType/WIFI Language/en",
            "华为P9全网通"                     =&gt;         "Mozilla/5.0 (Linux; Android 7.0; EVA-AL00 Build/HUAWEIEVA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 MicroMessenger/6.5.13.1100 NetType/WIFI Language/zh_CN",
            "小米5X"                        =&gt;         "Mozilla/5.0 (Linux; U; Android 7.1.2; zh-cn; MI 5X Build/N2G47H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.2.2",
            "一加手机3"                     =&gt;          "Mozilla/5.0 (Linux; Android 7.1.1; ONEPLUS A3000 Build/NMF26F; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 MicroMessenger/6.5.13.1100 NetType/WIFI Language/zh_CN",
            "努比亚Z11"                     =&gt;         "Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; NX531J Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/6.8 Mobile Safari/537.36",
            "小米5s"                        =&gt;         "Mozilla/5.0 (Linux; Android 6.0.1; MI 5s Build/MXB48T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 V1_AND_SQ_7.2.0_730_YYB_D QQ/7.2.0.3270 NetType/WIFI WebP/0.3.0 Pixel/1080",
            "华为nova"                        =&gt;         "Mozilla/5.0 (Linux; Android 7.0; HUAWEI CAZ-AL10 Build/HUAWEICAZ-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 V1_AND_SQ_7.1.0_692_YYB_D QQ/7.1.0.3175 NetType/WIFI WebP/0.3.0 Pixel/1080",
            "联想ZUK Z2 Pro"                  =&gt;         "Mozilla/5.0 (Linux; Android 7.0; ZUK Z2121 Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 V1_AND_SQ_7.2.0_730_YYB_D QQ/7.2.0.3270 NetType/4G WebP/0.3.0 Pixel/1080",
            "魅蓝note 3"                      =&gt;      "Mozilla/5.0 (Linux; Android 5.1; m3 note Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/9.3 baiduboxapp/9.3.0.10 (Baidu; P1 5.1)",
            "三星GALAXY S8+"                  =&gt;      "Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; SM-G9550 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36",
            "魅族MX6    "                        =&gt;      "Mozilla/5.0 (Linux; Android 6.0; MX6 Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 MicroMessenger/6.5.13.1100 NetType/4G Language/zh_CN",
            "vivo Xplay5A"                  =&gt;       "Mozilla/5.0 (Linux; Android 5.1.1; vivo Xplay5A Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/9.3 baiduboxapp/9.3.0.10 (Baidu; P1 5.1.1)",
            "三星GALAXY C7"                   =&gt;      "Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; SM-C7000 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.6.2.948 Mobile Safari/537.36",
            "三星GALAXY S8"                   =&gt;         "Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; SM-G9500 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36",
            "荣耀8青春版"                     =&gt;         "Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; PRA-AL00 Build/HONORPRA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36",
            "UCOpenwave"                      =&gt;      "Openwave/ UCWEB7.0.2.37/28/999",
            "UC Opera"                        =&gt;      "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",
            "小米4S"                        =&gt;      "Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; MI 4S Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.1.3",
            "OPPO R12"                     =&gt;          "Mozilla/5.0 (Linux; U; Android 7.1.1; zh-CN; OPPO R11 Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36",
            "iPhone2"                        =&gt;          "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.7 NetType/WIFI Language/zh_CN",<span style="color: rgba(0, 0, 0, 1)">
      ];
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(128, 0, 128, 1)">$agentarry</span>[<span style="color: rgba(0, 128, 128, 1)">array_rand</span>(<span style="color: rgba(128, 0, 128, 1)">$agentarry</span>,1<span style="color: rgba(0, 0, 0, 1)">)];
    }</span></pre>
</div>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    ————一切的一切都要从"Hello world"说起。<br><br>
来源:https://www.cnblogs.com/MingGyGy-Castle/p/14123404.html
頁: [1]
查看完整版本: uni-app无法设置Request请求头Referer解决办法