PHP cURL 发送 bool POST 变量

4 人关注

我有一个PHP curl脚本,向CloudFlare API发送一些POST变量。 我的字段是。

 $fields = array(
        'type' => 'A',
        'name' => $subdomain.rand(1, 2000),
        'content' => Env::getCFIP(),
        'proxied' => true,
        'ttl' => 1

而curl的curl_setopt是。

 array(
            CURLOPT_POST            => true,
            CURLOPT_SSL_VERIFYPEER  => false,
            CURLOPT_POSTFIELDS      => $fields,
            CURLOPT_RETURNTRANSFER  => 1,
            CURLOPT_TIMEOUT         => 3,
            CURLOPT_VERBOSE         => 0,
            CURLOPT_FORBID_REUSE    => true,
            CURLOPT_HTTPHEADER      => array(
                'X-Auth-Email: '.Env::getCFEmail(),
                'X-Auth-Key: '.Env::getCFAuthKey(),

默认情况下,"proxied "的值是假的。如果我在数据字段中跳过它,脚本可以工作。然而,我想让它变成 "真",但我得到了错误。

 object(stdClass)[2]
      public 'success' => boolean false
public 'errors' => 
        array (size=1)
            object(stdClass)[8]
              public 'code' => int 1004
public 'message' => string 'DNS Validation Error' (length=20)
              public 'error_chain' => 
                array (size=1)
                    object(stdClass)[7]
                       public 'code' => int 9003
public 'message' => string 'Invalid 'proxied' value, must be a boolean' (length=42)
      public 'messages' => 
        array (size=0)
          empty
public 'result' => null

所以我的猜测是,当cURL发送POST请求时,它将数据变量转换为STRING。有什么办法可以阻止这种行为吗?

4 个评论
你可以发送1代表真,0代表假。
@tanaydin ,设置为1,'1','true','True',不起作用。
当你回来的时候,把它转换成整数,就可以工作了。
@tanaydin 把它转为bool、int,或把$fields数组转为对象都不起作用。我仍然得到同样的错误。
php
api
curl
cloudflare
Stanislav Stankov
Stanislav Stankov
发布于 2017-09-08
1 个回答
Stanislav Stankov
Stanislav Stankov
发布于 2017-09-08
0 人赞同

我设法通过以下方式解决这个问题。

  • 将字段编码为 json

        CURLOPT_POSTFIELDS      => json_encode($fields),
    
  • 在头文件中添加'Content-Type: application/json'

        CURLOPT_HTTPHEADER      => array(
    
  •