如何使用Guzzle进行这项工作

时间:2018-08-17 17:09:05

标签: php guzzle

我正在尝试使用Guzzle而不是curl来发出API请求。由于某些原因,此API要求在post字段值前添加request =。我该如何使用Guzzle?

这是使用curl的方法:

$postfields = json_encode(array('field1' => 'some value'));

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://someapi.com/PostRequest');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, "request=$postfields");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch);
$curlerror = curl_errno($ch);
if (!empty($curlerror))
{
    echo 'curl error: ' . $curlerror;
}
curl_close($ch);

echo $response;

我已经尝试过,但是API会以无效的格式错误返回。

$postfields = json_encode($request);

$client = new Client();
$response = $client->request('POST', 'https://someapi.com/PostRequest', array('request' => $postfields));

与此相同。

    $postfields = json_encode($request);

    $client = new Client();
    $response = $client->request('POST', 'https://someapi.com/PostRequest', array("request=$postfields"));
    print_r($response);

如果我尝试使用该方法,则错误提示参数3不是数组。

$postfields = json_encode($request);

$client = new Client();
$response = $client->request('POST', 'https://someapi.com/PostRequest', "request=$postfields");
print_r($response);

这可能是API设计不佳的情况,我无法使用Guzzle。

1 个答案:

答案 0 :(得分:1)

说实话,我很惊讶您的Curl示例可以正常工作,因为您应该urlencode数据。

但是,问题在于第三个参数不是要发布的数据。这是一个选项数组,其中的POST数据是一个选项,您需要使用密钥form_params发送:

$client->request('POST', 'https://someapi.com/PostRequest', array('query'=>array('request' => $postfields)));
// or
$client->request('POST', 'https://someapi.com/PostRequest', ['form_parms'=>['request'=>$postfields]]);

这是specified in the documentation