Yii2框架POST请求setHeader无法修改Content-Type

1 篇文章 0 订阅

初次接触Yii2框架,记录一下开发中碰到的问题,Yii2框架POST请求,setHeader一直无法修改Content-Type,使用了如下代码

$this->request_header[] = 'timestamp:'.$timestamp;
$this->request_header[] = 'sign:'.$signStr;
$this->request_header[] = "Content-Type: application/json";
            $result = \Yii::$app->http
                ->post($url)
                ->setData($params)
                ->setHeaders($this->request_header)
                ->send();

一直无法调通程序,日志中显示

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

查看Client源码,发现类似于设置格式的地方,

    /**
     * JSON format
     */
    const FORMAT_JSON = 'json';
    /**
     * urlencoded by RFC1738 query string, like name1=value1&name2=value2
     * @see http://php.net/manual/en/function.urlencode.php
     */
    const FORMAT_URLENCODED = 'urlencoded';
    /**
     * urlencoded by PHP_QUERY_RFC3986 query string, like name1=value1&name2=value2
     * @see http://php.net/manual/en/function.rawurlencode.php
     */
    const FORMAT_RAW_URLENCODED = 'raw-urlencoded';
    /**
     * XML format
     */
    const FORMAT_XML = 'xml';
    /**
     * CURL format
     * @since 2.0.9
     */
    const FORMAT_CURL = 'curl';

不过只看到了getFormatter()方法,所以尝试了一下能否修改Set

public function getFormatter($format)
    {
        static $defaultFormatters = [
            self::FORMAT_JSON => 'yii\httpclient\JsonFormatter',
            self::FORMAT_URLENCODED => [
                'class' => 'yii\httpclient\UrlEncodedFormatter',
                'encodingType' => PHP_QUERY_RFC1738
            ],
            self::FORMAT_RAW_URLENCODED => [
                'class' => 'yii\httpclient\UrlEncodedFormatter',
                'encodingType' => PHP_QUERY_RFC3986
            ],
            self::FORMAT_XML => 'yii\httpclient\XmlFormatter',
            self::FORMAT_CURL => 'yii\httpclient\CurlFormatter',
        ];

        if (!isset($this->formatters[$format])) {
            if (!isset($defaultFormatters[$format])) {
                throw new InvalidParamException("Unrecognized format '{$format}'");
            }
            $this->formatters[$format] = $defaultFormatters[$format];
        }

        if (!is_object($this->formatters[$format])) {
            $this->formatters[$format] = Yii::createObject($this->formatters[$format]);
        }

        return $this->formatters[$format];
    }

最终代码如下

            $result = \Yii::$app->http
                ->post($url)
                ->setData($params)
                ->setFormat('json')
                ->setHeaders($this->request_header)
                ->send();

请求成功,记录一下,新手填坑

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值