【问题标题】:How can I use Guzzle to make a post request to Vertifire API using Laravel?如何使用 Guzzle 向使用 Laravel 的 Vertifire API 发出发布请求?
【发布时间】: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


【解决方案1】:

尝试将您的请求更改为此

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

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

【讨论】:

  • 谢谢!与以前相同的错误:客户端错误:POST api50.vertifire.com/v2/serp/url 导致 400 错误请求响应:{"status":0,"error":{"code":3001,"message":"Missing term"} }
  • @JamesBlackmore 尝试将“数据”更改为“表单参数”(请参阅​​更新的答案)。我还更改了标题,尽管这可能不是问题的原因。没有文档很难,但我希望它对你有所帮助。
  • 感谢您的努力,我想通了!我编辑了附加解决方案的答案。
猜你喜欢
  • 1970-01-01
  • 2016-02-16
  • 2018-08-28
  • 1970-01-01
  • 2015-06-03
  • 2019-05-31
  • 2017-11-15
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多