curl post api对api的请求没有使用php

时间:2014-10-18 14:16:53

标签: php curl push

我正在尝试使用以下代码使用自己的API发送推送通知。我确信我的服务器启用了curl。我在下面作为回应。

        $url = "http://efpushtest.meteor.com/api/push";

        # Our new data
        $data = json_encode(array(
                'message' => "this is venkat test push message",
                'device' => "12345"
        ));

        $ch = curl_init($url);

        # Setting our options
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        # Get the response
        $result = curl_exec($ch);
        curl_close($ch);

回应:

  

{"成功":false,"消息":"意想不到的令牌"}

我没有得到这个代码的错误。

2 个答案:

答案 0 :(得分:0)

由于您在评论中说它期望发布参数,因此您的请求不应该像代码中那样进行json编码。处理这种情况的正确方法是发布字段,如下:

    $url = "http://efpushtest.meteor.com/api/push";

    # Our new data
    $data = array(
            'message' => "this is venkat test push message",
            'device' => "12345"
    );

    $ch = curl_init($url);

    // build the post string here
    foreach($data as $key=>$value) { 
        $fields_string .= $key.'='.$value.'&'; 
    }

    rtrim($fields_string, '&');

    # Setting our options
    curl_setopt($ch, CURLOPT_POST, count($data));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    # Get the response
    $result = curl_exec($ch);
    curl_close($ch);

您实际上将参数作为POST参数发布,并以GET中的形式在字符串中传递它们。您的示例将发布:

  

message =这是venkat测试推送消息& device = 12345

如果我是你,我还会更新数组声明,以便将url_encoded值传递给帖子,如下所示:

    $data = array(
            'message' => urlencode("this is venkat test push message"),
            'device' => urlencode("12345")
    );

防止字符串中的任何特殊字符破坏您的请求

JSON的旧答案

<德尔> 尝试设置curl请求的标题以指定您向api发布`json`         #设置我们的选项         curl_setopt($ ch,CURLOPT_HTTPHEADER,array(&#39; Content-Type:application / json&#39;));         curl_setopt($ ch,CURLOPT_POSTFIELDS,$ data);         curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true);

答案 1 :(得分:0)

因为我在浏览器控制台中得到相同的响应:

$.post( "/api/push/", { "message" : "this is venkat test push message","device" : "12345" } );

我会说问题在你的api代码中

这里的答案似乎也是这样说的:

https://stackoverflow.com/a/13022566/4152193