PHP中数据在HTTP中的传输,经常我们会用到一些接口请求,基本Curl的使用,我们会经常用到,你还在不断的用原生写法么,既然使用那么频繁,是不是应该有必要进行封装。
个人从工作中,受益,总结了一个自己习惯使用的rest类,专门用来做数据接口请求,同时也在网络上收藏了一份HttpClient工具类,两个都是非常好用,下载地址如下:https://github.com/Applaction/restTool/tree/master/http
对于RestClient是自己的使用习惯封装的,类的封装代码比较简介清晰,使用例子如下:
$headers = array("Content-Type" => "Application/json");
$url = 'http://www.demo.com';
$result = array(
'account_id' => 2,
'token' => 'b0ff5ccb0c408e4f9e8bcd72bd965457',
'alert_id' => 45
);
$data = json_encode($result);
$rest = new RestClient();
//可以不设置头,据情况而定。如果需要设置头信息,那么就直接定义一个数组就行
$info = $rest->make('post',$url,$data,$headers);
if($info->getStatus() != 200){
echo '失败了';
}
$response = $info->getResponse();
另外一个HttpClient.class.php收藏来自网络
//若是抓取页面的内容
$contents = HttpClient::quickGet('http://www.baidu.com/');
var_dump($contents);
//post请求某一个接口,返回的信息赋值给$res
$res = HttpClient::quickPost('http://example.com/sms.php', array(
'name' => 'kevin.liu',
'phone' => '18201042042'
));
可能有一些请求访问会出问题,则需要加一个userAgent,模拟浏览器进行访问
$client = new HttpClient('example.com');
$client->setDebug(true);
$client->setUserAgent('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3a) Gecko/20021207');
if (!$client->get('/')) {
die('An error occurred: '.$client->getError());
}
$contents = $client->getContent();
还有一些情况是:在采集数据的时候必须先登陆,则可以先模拟登陆
$client = new HttpClient('example.com');
$client->post('/login.php', array( //登陆地址
'username' => 'kevin',
'password' => '123456'
));
if (!$client->get('/demo.php')) { //采集数据的目标地址
die('An error occurred: '.$client->getError());
}
$pageContents = $client->getContent();