catmes/http-client

Http请求工具

v1.0.3 2021-05-30 17:48 UTC

This package is not auto-updated.

Last update: 2024-05-13 07:58:41 UTC


README

Http请求工具

安装

$ composer require catmes/http-client

基本用法

<?php

use Catmes\HttpClient\Curl;

$getData = Curl::get("https://www.baidu.com");
echo $getData;

$postData = ['username'=>'tom','password'=>'pwd123'];
// x-www-form-urlencoded 数据格式
$postResponse = Curl::post("http://default_form_urlencoded", $postData);
// json 数据格式
$postResponse = Curl::post("http://post_json_data", $postData, 'json');

高级用法

上传文件


use Catmes\HttpClient\Curl;
$uploadFilePath = __DIR__."/sample_img.jpg";
$postData['upload'] = new \CURLFile($uploadFilePath);
$curl = new Curl($url, 'post', $postData);
$response = $curl->getResponse();

// 服务端处理上传文件的PHP代码
if($_FILES){
    $filename = $_FILES['upload']['name'];
    $tmpname = $_FILES['upload']['tmp_name'];
    //保存图片到当前脚本所在目录
    if(move_uploaded_file($tmpname, __DIR__.'/'.$filename)){
        echo ('上传成功');
    }
}

下载文件

$url = "https://download.virtualbox.org/virtualbox/6.1.22/virtualbox-6.1_6.1.22-144080~Debian~buster_amd64.deb";
$filepath = "virtualbox-6.1_6.1.22-buster_amd64.deb";
$curl = new Curl($url);
$curl->downloadFile($filepath)->getResponse();

模拟登录

获取登录的cookie缓存

$postData = ['username'=>'tom','password'=>'pwd123'];
$curl = new Curl("https://yoursite/login_post.php", 'post', $postData);
// 设置提交数据为 x-www-form-urlencoded。
$curl->postUrlEncoded();
// 通过设置自定义请求头,伪造访问来源
$curl->setHeader("referer","https://yoursite.com/login.php");
// 设定登录成功后,保存响应头的 cookie 数据到本地文件
$curl->cookieSave("curl.cookie");
// getResponse()方法执行HTTP网络请求,并返回响应的Response对象。 
$response = $curl->getResponse();

通过cookie访问授权网址

// 获取前面模拟登录成功后,返回的响应头。 为数组键值对类型。
$headersMap = $response->getHeadersMap();

// POST登录成功后,读取本地的cookie文件。 可以通过前面登录成功后,响应头的 `location` 数据,进行页面自动跳转。
if(array_key_exists('location', $headersMap)){
    $curl = new Curl($headersMap['location']);
    $response = $curl->cookieRequest("curl.cookie")->getResponse();
    echo $response;
}

自定义请求头

$curl = new Curl("https://www.baidu.com");
// 通过设置用户代理 user-agent 请求头,模拟出win10的谷歌浏览器。
$curl->setHeader('user-agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36');
$response = $curl->getResponse();
echo $response;

响应对象

正常请求成功后,返回响应类 Catmes\HttpClient\Response 的对象实例。 因存在__toString()魔术方法, 直接输出为消息主体字符串。 即 Response 实例的 getBody()方法

// 获取响应头。 为数组键值对类型。
$headersMap = $response->getHeadersMap();
// 获取响应头。 数组列表类型。
$responseHeaders = $response->getHeadersList();
// 获取响应消息主体。字符串类型。
$responseBody = $response->getBody();
// 获取响应状态码。数据类型为整数。 如200, 400, 302 ...
$responseStatusCode = $response->getStatusCode();