以数组或字符串形式发送帖子时的区别

时间:2018-11-01 18:58:53

标签: php post libcurl

我在使用PHP的libcurl时遇到问题。我正在使用类似这样的字符串发送帖子数据:

    $post="var1=val1&var2=val2";
    curl_setopt($this->ch, CURLOPT_URL, $url);
    curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($this->ch, CURLOPT_POST, 1);
    curl_setopt($this->ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded','Accept-Encoding: gzip'));
    curl_setopt($this->ch,CURLOPT_ENCODING , "gzip");
    curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post);

它运行完美,但是我想改为使用数组来代替:

    $post=array();
    $post['var1']="val1";
    $post['var2']="val2";

    curl_setopt($this->ch, CURLOPT_URL, $url);
    curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($this->ch, CURLOPT_POST, 1);
    curl_setopt($this->ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded','Accept-Encoding: gzip'));
    curl_setopt($this->ch,CURLOPT_ENCODING , "gzip");
    curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post);

但是服务器似乎没有收到相同的东西,我缺少什么吗?

1 个答案:

答案 0 :(得分:0)

注释here说:

  

注意:   将数组传递给CURLOPT_POSTFIELDS会将数据编码为multipart / form-data,而传递URL编码的字符串会将数据编码为application / x-www-form-urlencoded。

这可能是其他网站无法识别相同方式的原因。 解决方法是,您可以使用$post = http_build_query($post);

将数组转换为字符串