PHP发起POST请求(支持模拟表单和json传值)

Stella981
• 阅读 465

HTTP请求是开发的过程中经常会遇到的任务,GET请求比较简单,但是POST请求却会遇到一些问题。有时候对方需要你模拟表单请求,有时候又希望你传递一个json。我们可以封装一个通用的方法来完成。

function post($url, $data = [], $isJson = true,  $headers = [], $timeout = 10)
{
    if ($isJson) {
        $headers['Content-Type'] = 'application/json';
        $postFields = json_encode($data);
    } else {
        $headers['Content-Type'] = 'application/x-www-form-urlencoded';
        $postFields = http_build_query($data);
    }

    $headers = formatHeader($headers);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    //设定请求后返回结果
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //忽略证书
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
    // 忽略返回的header头信息
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // 请求头信息
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    // 设置超时时间
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    $response = curl_exec($ch);
    $curlInfo = curl_getinfo($ch);
    curl_close($ch);
    return $response;
}

/**
 * 对header信息进行格式化处理
 * @param $headers
 * @return array
 */
function formatHeader($headers)
{
    if (empty($headers)) return [];

    $result = [];
    foreach ($headers as $key => $value) {
        $result[] = "$key:$value";
    }

    return $result;
}

模拟表单请求:

$url = 'https://test.com';
$params = [
    'name' => 'guo',
    'age' => 25
];
$result = post($url, $params, true);

发送json数据:

$url = 'https://test.com';
$params = [
    'name' => 'guo',
    'age' => 25
];
$result = post($url, $params, false);
点赞
收藏
评论区
推荐文章
Easter79 Easter79
2年前
vue axios get请求参数为json对象 而非字符串形式
axiosget请求方式传递给后台的参数都是字符串下形式,无法传递json对象或数组对象等post请求方式则可以实现,但若后台接口要求必须用get方式传递对象给后台,需要装插件
Firefox数据抓包分享
啥是POST请求呢?我们在做一些信息提交的时候比如注册,登录这时候我们做的就是POST请求,POST的参数不会直接放在URL上,会以Form表单的形式将数据提交给服务器。我们来登录一下ip.16yun.cn:817还有就是请
Stella981 Stella981
2年前
Linux模拟HTTP请求
一个简单的GET请求使用curl命令可以轻松发起一个HTTP请求:使用GET凡是请求网址curlhttp://www.baidu.com可以使用X选项指定请求方式携带参数的POST请求下面演示一个带头部和参数的POST请求curlXPOST\'http://u
Wesley13 Wesley13
2年前
CURL请求
<?php    /        发起一个HTTP(S)请求,并返回json格式的响应数据        @param array 错误信息  array($errorCode, $errorMessage)        @param string 请求Url        @para
Stella981 Stella981
2年前
HttpURLConnection(http 1.1) 用法、状态码、状态描述
最近研究了java的HttpURLConnection的用法,这里简单的做一下记录:Java中可以使用HttpURLConnection来请求WEB资源。1、 URL请求的类别分为二类,GET与POST请求。二者的区别在于:     a:)get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
Stella981 Stella981
2年前
AngularJs初探
  最近着手开发一个后台系统,前端采用的是AngularJs来与后台交互,对于我们这群jquery疯狂的铁粉,遇到了不少转不过弯的问题,为了更高效的开发应用,在私下的时间收集和改造了一下AngularJS的$http服务,特此分享。$http的post.请求默认的contentTypeapplication/json.提交
Stella981 Stella981
2年前
Django之ajax(jquery)封装(包含 将 csrftoken 写入请求头方法)
由于支持问题,未使用es6语法\_ajax.js/发起请求@paramurl请求地址@paramdata请求数据{}json格式@paramtype请求类型get|post@paramsuccess请求成功回调方法(如果支持e
Stella981 Stella981
2年前
JS弹窗确认&Ajax封装方法
代码示例:varmodification{method:function(){//开始发送数据$.post({//请求登录处理页url:"/stock/modification",dataType:"json",//传送请求数据data:{
liam liam
1年前
post接口请求测试,通俗易懂!
GET方法和POST方法传递数据的异同http请求方法get和post是最常被用到的两个方法,get常用于向服务器请求数据,post常用于提交数据给服务器处理。GET方法其实也可以传递少量的数据。但它存在以下问题:1)GET方法不包含body,因此以在URL中拼接字段的方式传递数据,2)GET方法中的URL参数会被显示到地
京东云开发者 京东云开发者
9个月前
HTTP请求:requests的进阶使用方法浅析 | 京东云技术团队
上篇文章讲解了requests模块的基础使用,其中有get、put、post等多种请求方式,使用data、json等格式做为请求参数,在请求体中添加请求头部信息的常见信息,如:headers、cookies,以及对请求响应的处理方法。接下来讲解一下requests的高级用法。