如何使用Guzzle使用Laravel向Vertifire API发布请求?

时间:2017-07-20 09:33:46

标签: php laravel post laravel-5.4 guzzle

我尝试使用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,
                    ],
                ],
            ],
        ],
    ]);

1 个答案:

答案 0 :(得分:0)

尝试将您的请求更改为

$request = $client->post('v2/serp/url', [
    'headers'   => [
        'X-Vertifire-Token' => config('guzzleapi.vertifire_auth'),
    ] 
    'form_params' => [
        'term' => 'videos',
        'url' => 'wikipedia.org',
        'sep' => 1,
    ]
]);

让我知道它是否有效,或者你得到了什么回应。