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,第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命令建立的通道,这东西还能进行内网穿透,也就是让你的内网电脑里的服务可以让公网访问,前提是你得有一台公网服务器。这一台公网服务器可以让你的任何设备都变成一个公网可访问的设备。