我正在使用CURL从某些Web服务获取响应。问题是它需要一些像以下格式的POST数据:
{
"type": {
"manufacturer": "AX",
"model": "AX",
"submodel": "AX"
}
}
我的脚本如下:
$url = 'URL';
// Initiate curl
$ch = curl_init();
// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// Will return the response, if false it print the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Set the url
curl_setopt($ch, CURLOPT_URL,$url);
// Execute
$result=curl_exec($ch);
// Closing
curl_close($ch);
// Will dump a beauty json :3
var_dump(json_decode($result, true));
我找到了一种如何在CURL中使用POST的方法,它应该是:
$fields = array(
'manufacturer' => urlencode('AX'),
'model' => urlencode('AY'),
'submodel' => urlencode('AZ')
);
curl_setopt($ch,CURLOPT_POST, $fields);
但这对我来说根本不起作用:(总是得到答案为空。请有人帮我说出我做错了什么?
答案 0 :(得分:2)
创建一个类似json的示例并尝试使用它。你可以从邮递员那里得到样本数据。正如你所说,你可以通过邮递员发帖。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if($response === false){
echo 'Curl error: ' . curl_error($ch);
}
else{
print_r($response);
}
curl_close($ch);
答案 1 :(得分:0)
您是通过POST请求实际发布数据还是通过GET请求请求数据? 如果后者看看Guzzle,因为它允许你设置一个JSON体,而PHP cURL目前不会。 使用Guzzle就像这样简单:
$request = $guzzleClient->createRequest('GET', $endpoint);
$request->setBody(Stream::factory($jsonQuery));
$response = $guzzleClient->send($oRequest)
答案 2 :(得分:0)
谢谢大家的帮助,你引导我找到解决这个问题的正确办法。
问题出现了我在开始时插入json,你帮助我了,经过一些谷歌搜索我发现我也错过了标题Accept: application/json
,
所以最终版本看起来像:
$json = '{
"type": {
"manufacturer": "AX",
"model": "AY",
"submodel": "AZ"
}
}';
$ch = curl_init();
$url = 'WEB';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Accept: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if($response === false){
echo 'Curl error: ' . curl_error($ch);
}
else{
print_r($response);
}
curl_close($ch);
谢谢大家,祝周末愉快