在PHP调用别人的接口,需要用到curl相关操作,本文章集成了多个操作方法,并在今后的工作中不断完善
/**
* @Author: 小破孩嫩
* @Email: 3584685883@qq.com
* @Time: 2021/4/1 10:39
* @param string $url url地址
* @param bool $params 参数
* @param int $ispost 是否是post请求,默认get
* @param int $https 是否是https,默认http
* @param int $flbg 返回值是否转成数组,默认不转
* @param int $header 是否传递header值,默认不传,header值格式:$header = ['CLIENT-IP:127.0.0.1','X-FORWARDED-FOR:127.0.0.1'];
* @param int $headercontent 是否获取请求的header值内容,默认不获取
* @param int $local 是否使用本地ip进行请求,默认不使用
* @return array|bool|mixed|string
* @Description:curl请求
*/
public function curl($url, $params = false, $ispost = 0, $https = 0, $flbg = 0, $header = 0,$headercontent = 0,$local = 0){
// $httpInfo = [];
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36');
// curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if($header){
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
if($headercontent){
curl_setopt($ch, CURLOPT_HEADER, 1);
}
if($local){
$header = [
'CLIENT-IP:127.0.0.1',
'X-FORWARDED-FOR:127.0.0.1'
];
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
if($https){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
}
if($ispost){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_URL, $url);
}else{
if($params){
if (is_array($params)) {
$params = http_build_query($params);
}
curl_setopt($ch, CURLOPT_URL, $url . '?' . $params);
}else{
curl_setopt($ch, CURLOPT_URL, $url);
}
}
$response = curl_exec($ch);
// if($response === FALSE){
// echo "CURL Error: " . curl_error($ch);
// return false;
// }
// $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// $httpInfo = array_merge($httpInfo, curl_getinfo($ch));
if($headercontent){
//对返回的结果进行字符串处理
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') {
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headers = substr($response, 0, $headerSize);
$body = substr($response, $headerSize);
return [$headers,$body]; //body内容是图片
}
}
curl_close($ch);
if ($flbg) {
$response = json_decode($response, true);
}
return $response;
}
上面的用本地请求的场景是,被curl请求接口做了IP限制,如果本地不可以用,可以使用下面的方法
需要一个有效的代理ip和端口号,有的还需要用户名密码,代码如下:
curl_setopt($ch, CURLOPT_PROXY, "http://39.156.69.79:8080");
窍门:一般情况下是不需要代理,但是伪造的ip不能用,就ping一下你扒取接口的网址,然后用这个网址的ip做伪造。百分百成功。如遇类似问题不能解决,欢迎留言讨论。
评论