【PHP】HTTP请求工具使用文档

该工具仅仅只是将php自带的curl功能,进行了一层封装。使得一些日常使用http请求时,不需要去重复的配置curl信息,减少开发工作量。

导入使用

下载链接:https://download.csdn.net/download/d745282469/85030673

如果是用的TP框架,则可在public/index.php中按照以下方式进行导入:

namespace think;

require __DIR__ . '/../vendor/autoload.php';

// HTTP请求工具,具体的路径以实际为准
require __DIR__. '/../extend/HttpTool/AutoLoad.php'; 

// 执行HTTP应用并响应
$http = (new App())->http;

$response = $http->run();

$response->send();

$http->end($response);

非TP框架的话,在需要使用到的php文件中,在顶部加入以下代码即可:

require __DIR__. '/../extend/HttpTool/AutoLoad.php';

具体的路径,以实际为准。

使用前须知

确定当前的php已经开启了curl扩展!!!

每个请求,主要涉及到以下两个类:

DHttpClient:请求客户端,主要用于配置代理、https验证、ssl证书、http版本等,具体可查看该类提供的方法。

DRequestBuilder:请求体构造器,主要用于配置请求相关的参数,如:请求地址、请求方式、请求头、请求cookie等。

DRequest:由DRequestBuilder构造得出,没啥用,只是给DHttpClient去使用的,和Builder基本一样。

发送请求

get请求
// 请求地址
$url = 'htts://www.baidu.com';

// 请求参数,如果为get请求,会自动把参数拼接到请求地址中
$param['wd'] = 'PHP官方文档';

// 请求构造器
$requestBuilder = new DRequestBuilder($url);

// 可以采用链式写法。paramData()是用于设置请求参数的,接收的是数组类型。
// get()表示该请求使用get方式,同理还有post()。如果不指定请求方式,默认为get
$requestBuilder->paramData($param)->get();

// 实例化请求客户端
$client = new DHttpClient();

// 执行请求并获取结果
$response = $client->execute($requestBuilder->build());
post请求
// 请求地址
$url = 'htts://www.xxx.com';

// 请求参数,如果为get请求,会自动把参数拼接到请求地址中
$param['wd'] = 'PHP官方文档';

// 请求构造器
$requestBuilder = new DRequestBuilder($url);

// 可以采用链式写法。paramData()是用于设置请求参数的,接收的是数组类型。
// 注意这里写的是post(),如果漏写则会默认用get()
$requestBuilder->paramData($param)->post();

// 实例化请求客户端
$client = new DHttpClient();

// 执行请求并获取结果
$response = $client->execute($requestBuilder->build());			
添加请求头

设置请求头时,主要是对构造器,即DRequestBuilder,使用addHeader()方法。该方法接收一个DHeader对象。

以下举例,访问一个需要带token的接口时的一个例子。

$url = '请求地址';

$param = ['请求参数'];

$requestBuilder = new DRequestBuilder($url);

// DHeader对象,构造函数接收两个参数,一个是Header的key,一个是Header对应的value
$requestBuilder->addHeader(new DHeader('token','实际的token值'))->post();

$client = new DHttpClient();
$response = $client->execute($requestBuilder->build());

重复设置相同key的请求头,工具不会自动进行覆盖!!!具体发出去的请求是什么样的,没有测试过。

添加cookie

设置cookie,主要使用到的是DRequestBuilder下面的addCookie()方法。该方法接收一个DCookie对象参数。

$url = '请求地址';

$param = ['请求参数'];

$requestBuilder = new DRequestBuilder($url);

// DCookie对象,构造函数接收两个参数,一个是Cookie的key,一个是Cookie对应的value
$requestBuilder->addCookie(new DCookie('cookie的key','对应的cookie的value'))->post();

$client = new DHttpClient();
$response = $client->execute($requestBuilder->build());
某些接口需要申明ContentType的特殊情况

工具内置了两个常见的ContentType,一个是application/x-www-form-urlencoded,一个是application/json。

对应的使用方法参考下面的例子:

$requestBuilder =  new DRequestBuilder('请求地址');

// 此时工具会自动处理,加上请求头:Content-Type:application/json,并对请求参数进行处理
$requestBuilder->jsonData(数组类型的请求参数);

// 此时工具会自动处理,加上请求头:Content-Type:application/x-www-form-urlencoded,并对请求参数进行处理
$requestBuilder->urlEncodeData(数组类型的请求参数);

如果没有使用以上两种方式设置ContentType,并且同时没有调用addHeader去设置的话,那么默认的请求头中是没有ContentType的。这种情况,对于有些接口,可能会导致接口提示缺少参数或参数错误之类的错误信息。

出现这种情况,是因为没设置ContentType时,工具会将请求参数转换成字符串的形式。然后对于有些接口的服务端那边,由于识别不到ContentType,所以无法确定传过去的字符串需要用什么方式去解析,导致解析不出来参数,因此报错。

获取响应结果

当调用DHttpClient的execute()方法后,会返回一个DResponse对象。对象中,主要有以下几个属性:

statusCode:HTTP响应状态码

responseStr:响应内容的字符串形式

cookieList:包含接口返回的DCookie对象的一个数组,默认为空

header:包含响应头DHeader对象的一个数组,默认为空

获取特定的响应头

使用DResponse->getHeader()方法。该方法接收一个key,用于判断需要获取哪一个响应头。

以下举例获取HTTP状态码为304重定向时,需要获取重定向后的地址,那么就需要用到该方法。

$newUrl = $response->getHeader('Location');
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值