PHP中使用代理的方式通過curl發送http請求
curl是PHP中經常用來發送http請求的擴展,比如我們要通過PHP調用一個第三方接口,那么就會用到這個擴展提供的方法。
目前,開發微信相關的應用很廣泛,然而微信某些安全系數要求很高的接口是需要配置ip白名單才能調用的,我們在本機進行開發的時候,ip地址往往都是變化的,所以就要經常去配置ip白名單。
一般來說,我們開發應用的時候都會有開發使用的服務器,上面運行着數據庫,redis這樣的服務供我們本機開發使用,當然這些服務都裝在本機也是沒問題的,只不過有時候數據庫里的數據大家可能需要共享,所以一般會使用一台公網服務器更方便大家開發。
而這台公網服務器的ip地址是不變的,一般我們都是買的雲服務器,會提供一個固定的公網服務器ip地址,我們在使用curl的時候可以通過這台公網服務器代理發送我們的請求,這樣ip地址就會一直保持不變了。
下面看具體實現代碼:
1 $ch = curl_init(); 2 curl_setopt($ch, CURLOPT_URL, $url); 3 curl_setopt($ch, CURLOPT_POST, 1); 4 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 5 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 6 curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 7 curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); 8 curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1"); 9 curl_setopt($ch, CURLOPT_PROXYPORT, 8989); 10 $output = curl_exec($ch); 11 curl_close($ch);
注意到以上6-9行代碼就是用來設置代理的部分,第8行設置了代理的服務器ip(注意:需要改成自己的公網服務器IP),第9行設置了端口,既然有ip有端口,說明在該ip的服務器上應該有一個服務是正在監聽這個端口的對吧?
沒錯,那這是個什么服務呢?
很簡單,如果是Linux服務器,只需要一條命令就可以開啟這個服務,而且什么都不需要安裝!
ssh -ND 0.0.0.0:8989 127.0.0.1
在執行上面的命令的時候可能需要root權限,因為監聽的是0.0.0.0,關於命令的具體解釋,有興趣大家可以去查閱ssh命令的使用,還有確保你的端口沒有被防火牆限制。
其實,ssh命令的功能遠不止如此,我們在使用ssh通道進行mysql鏈接時,也是使用的ssh命令建立的通道,這東西還能進行內網穿透,也就是讓你的內網電腦里的服務可以讓公網訪問,前提是你得有一台公網服務器。這一台公網服務器可以讓你的任何設備都變成一個公網可訪問的設備。