我正在尝试使用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。
答案 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]]);