CURL发送POST数据

时间:2015-04-17 08:44:11

标签: php curl

我正在使用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);

但这对我来说根本不起作用:(总是得到答案为空。请有人帮我说出我做错了什么?

3 个答案:

答案 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);

谢谢大家,祝周末愉快