php-使用Guzzle将数据更新为EventBrite API

我可以使用带有以下代码的post添加事件:

//Create client
$client = new Client([
    'base_uri' => 'https://www.eventbriteapi.com/v3/',
]);

$params = [
  'event.name.html' => $this->Name,
  'event.description.html' => $this->Description,
  'event.listed'  => false,
  'event.start.utc'  => $this->StartTime,
  'event.start.timezone'  => 'Europe/London',
  'event.end.utc'  => $this->EndTime,
  'event.end.timezone'  => 'Europe/London',
  'event.currency'  => 'GBP'
];

try {
  //Send new event request
  $res = $client->request('POST', "events/", [
    'query' => ['token' => env('EVENTBRITE_TOKEN', '')],
    'form_params' => $params
  ]);
} catch (GuzzleException $e) {
  return false;
}

但是,当我尝试使用在第一步中创建的ID和以下代码更新事件时:

//Send update event request
$res = $client->request('POST', "events/$this->EventBriteID", [
  'query' => ['token' => env('EVENTBRITE_TOKEN', '')],
  'form_params' => $params
]);

它不会更新事件.该请求看起来成功.状态200与事件对象一起返回的时间很长,但是没有数据被更新.信息与创建事件时提交的信息相同.我做错了,我发现很难调试,因为端点返回200状态.

该请求在Postman中工作正常,因此我在Guzzle中显然做错了.

编辑

如$response-> request()的请求输出

Client {#289 ▼
  -config: array:8 [▼
    "base_uri" => Uri {#298 ▼
      -scheme: "https"
      -userInfo: ""
      -host: "www.eventbriteapi.com"
      -port: null
      -path: "/v3/"
      -query: ""
      -fragment: ""
    }
    "handler" => HandlerStack {#165 ▼
      -handler: StreamHandler {#292 ▼
        -lastHeaders: []
      }
      -stack: array:4 [▼
        0 => array:2 [▼
          0 => Closure {#293 ▼
            class: "GuzzleHttp\Middleware"
            parameters: {▼
              $handler: {▼
                typeHint: "callable"
              }
            }
            file: "/home/user/mysite/vendor/guzzlehttp/guzzle/src/Middleware.php"
            line: "54 to 69"
          }
          1 => "http_errors"
        ]
        1 => array:2 [▼
          0 => Closure {#296 ▼
            class: "GuzzleHttp\Middleware"
            parameters: {▼
              $handler: {▼
                typeHint: "callable"
              }
            }
            file: "/home/user/mysite/vendor/guzzlehttp/guzzle/src/Middleware.php"
            line: "148 to 150"
          }
          1 => "allow_redirects"
        ]
        2 => array:2 [▼
          0 => Closure {#295 ▼
            class: "GuzzleHttp\Middleware"
            parameters: {▼
              $handler: {▼
                typeHint: "callable"
              }
            }
            file: "/home/user/mysite/vendor/guzzlehttp/guzzle/src/Middleware.php"
            line: "27 to 43"
          }
          1 => "cookies"
        ]
        3 => array:2 [▼
          0 => Closure {#286 ▼
            class: "GuzzleHttp\Middleware"
            parameters: {▼
              $handler: {▼
                typeHint: "callable"
              }
            }
            file: "/home/user/mysite/vendor/guzzlehttp/guzzle/src/Middleware.php"
            line: "216 to 218"
          }
          1 => "prepare_body"
        ]
      ]
      -cached: null
    }
    "allow_redirects" => array:5 [▼
      "max" => 5
      "protocols" => array:2 [▼
        0 => "http"
        1 => "https"
      ]
      "strict" => false
      "referer" => false
      "track_redirects" => false
    ]
    "http_errors" => true
    "decode_content" => true
    "verify" => true
    "cookies" => false
    "headers" => array:1 [▼
      "User-Agent" => "GuzzleHttp/6.2.1 PHP/7.0.8-0ubuntu0.16.04.3"
    ]
  ]
}

解决方法:

因此,经过数小时的绝望,我终于解决了它.问题是端点URL上缺少尾部斜杠:

$res = $client->request('POST', "events/$this->EventBriteID", []);

变成

$res = $client->request('POST', "events/$this->EventBriteID/", []);

现在可以正常工作了.

上一篇:PHP-用Guzzle做“ curl -u”


下一篇:php-使用GuzzleHttp从HTTP调用获取cookie的值