【发布时间】:2017-12-25 22:07:06
【问题描述】:
我正在尝试将 Guzzle 与 Laravel 一起使用,以使用 Vertifire API 发出帖子请求。根据 Vertifire 的文档,最小的发布请求应该是:
curl https://api50.vertifire.com/v2/serp/url \
--header "X-Vertifire-Token: MY TOKEN HERE" \
--data terms[0][term]=videos \
--data terms[0][url]=wikipedia.org \
--data terms[0][sep][search_engine]=1
按照 Guzzle 的文档,首先我创建一个客户端:
$client = new Client(['base_uri' => 'https://api50.vertifire.com/']);
而我一直坚持提出实际请求:
$request = $client->post('v2/serp/url', [
'headers' => config('guzzleapi.vertifire_auth'), // Laravel's config file with token
'data' => [
$terms[0]['term'] = 'videos',
$terms[0]['url'] = 'wikipedia.org',
$terms[0]['sep']['search_engine'] = 1,
]
]);
导致错误的结果:
Client error: `POST https://api50.vertifire.com/v2/serp/url` resulted in a `400 Bad Request`
response: {"status":0,"error":{"code":3001,"message":"Missing term"}}
显然我搞砸了将数据传递给请求的方式...如何使用 Guzzle 将特定数据或数据数组传递给发布请求?任何帮助将不胜感激,因为我是该领域的新手。
谢谢!
已解决/解决方案
似乎将数据传递给请求的正确方法是像这样扩展数组的数据:
$ranks_request = $client->post('v2/serp/url', [
'headers' => config('guzzleapi.vertifire_auth'),
'form_params' => [
'terms' => [
[
'term' => 'videos',
'url' => 'wikipedia.org',
'sep' => [
'search_engine' => 1,
],
],
],
],
]);
【问题讨论】:
-
你能展示一下这个 Vertifire API 的特定端点的文档吗?
-
标题应该是键和值数组[['X-Vertifire-Token' => '****']]
-
@piscator 不幸的是,这是一个高级帐户,没有可用的公共链接,但我看到的是:该请求最多接受 10 个条目。每个条目都是以下必填字段的组合:term(字符串)、url(字符串)和 sep(set - search_engine)
-
@AmeerSalahAldeen 标题看起来没问题,因为设置存储在 Laravel 的配置文件中,我可以发出 GET 请求
标签: php laravel post laravel-5.4 guzzle