php curl get请求请求头,php通过Curl扩展发送Post、Get请求

php通过Curl扩展发送Post、Get请求<?php

/*

* Copyright (c) 2017 Baidu.com, Inc. All Rights Reserved

*

* Licensed under the Apache License, Version 2.0 (the "License"); you may not

* use this file except in compliance with the License. You may obtain a copy of

* the License at

*

* Http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT

* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the

* License for the specific language governing permissions and limitations under

* the License.

*/

/**

* Http Client

*/

class AipHttpClient

{

protected $headers;

protected $connectTimeout;

protected $socketTimeout;

protected $conf;

/**

* HttpClient

* @param array $headers HTTP header

*/

public function __construct($headers = array())

{

$this->headers = $this->buildHeaders($headers);

$this->connectTimeout = 60000;

$this->socketTimeout = 60000;

$this->conf = array();

}

/**

* 连接超时

* @param int $ms 毫秒

*/

public function setConnectionTimeoutInMillis($ms)

{

$this->connectTimeout = $ms;

}

/**

* 响应超时

* @param int $ms 毫秒

*/

public function setSocketTimeoutInMillis($ms)

{

$this->socketTimeout = $ms;

}

/**

* 配置

* @param array $conf

*/

public function setConf($conf)

{

$this->conf = $conf;

}

/**

* 请求预处理

* @param resource $ch

*/

public function prepare($ch)

{

foreach ($this->conf as $key => $value) {

curl_setopt($ch, $key, $value);

}

}

/**

* @param string $url

* @param array $data HTTP POST BODY

* @param array $param HTTP URL

* @param array $headers HTTP header

* @return array

*/

public function post($url, $data = array(), $params = array(), $headers = array())

{

$url = $this->buildUrl($url, $params);

$headers = array_merge($this->headers, $this->buildHeaders($headers));

$ch = curl_init();

$this->prepare($ch);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_POSTFIELDS, is_array($data) ? http_build_query($data) : $data);

curl_setopt($ch, CURLOPT_TIMEOUT_MS, $this->socketTimeout);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $this->connectTimeout);

$content = curl_exec($ch);

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($code === 0) {

throw new Exception(curl_error($ch));

}

curl_close($ch);

return array(

'code' => $code,

'content' => $content,

);

}

/**

* @param string $url

* @param array $datas HTTP POST BODY

* @param array $param HTTP URL

* @param array $headers HTTP header

* @return array

*/

public function multi_post($url, $datas = array(), $params = array(), $headers = array())

{

$url = $this->buildUrl($url, $params);

$headers = array_merge($this->headers, $this->buildHeaders($headers));

$chs = array();

$result = array();

$mh = curl_multi_init();

foreach ($datas as $data) {

$ch = curl_init();

$chs[] = $ch;

$this->prepare($ch);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_POSTFIELDS, is_array($data) ? http_build_query($data) : $data);

curl_setopt($ch, CURLOPT_TIMEOUT_MS, $this->socketTimeout);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $this->connectTimeout);

curl_multi_add_handle($mh, $ch);

}

$running = null;

do {

curl_multi_exec($mh, $running);

usleep(100);

} while ($running);

foreach ($chs as $ch) {

$content = curl_multi_getcontent($ch);

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

$result[] = array(

'code' => $code,

'content' => $content,

);

curl_multi_remove_handle($mh, $ch);

}

curl_multi_close($mh);

return $result;

}

/**

* @param string $url

* @param array $param HTTP URL

* @param array $headers HTTP header

* @return array

*/

public function get($url, $params = array(), $headers = array())

{

$url = $this->buildUrl($url, $params);

$headers = array_merge($this->headers, $this->buildHeaders($headers));

$ch = curl_init();

$this->prepare($ch);

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_TIMEOUT_MS, $this->socketTimeout);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $this->connectTimeout);

$content = curl_exec($ch);

$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($code === 0) {

throw new Exception(curl_error($ch));

}

curl_close($ch);

return array(

'code' => $code,

'content' => $content,

);

}

/**

* 构造 header

* @param array $headers

* @return array

*/

private function buildHeaders($headers)

{

$result = array();

foreach ($headers as $k => $v) {

$result[] = sprintf('%s:%s', $k, $v);

}

return $result;

}

/**

*

* @param string $url

* @param array $params 参数

* @return string

*/

private function buildUrl($url, $params)

{

if (!empty($params)) {

$str = http_build_query($params);

return $url . (strpos($url, '?') === false ? '?' : '&') . $str;

} else {

return $url;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值