使用POST方法的file_get_contents()显示为GET?

时间:2018-01-22 05:52:33

标签: php google-app-engine

使用Google App Engine,在使用POST方法调用我的API时,它显示为GET - 为什么?

这是我的代码:

function call_api($client_id, $client_secret, $data) {
    $api_url = 'http://myapp.com/api.php';

    $options = array(
        'http' => array(
            'header' => "Authorization: Basic " . Base64_encode("$client_id:$client_secret") . "\r\nContent-type: application/x-www-form-urlencoded\r\n",
            'method' => 'POST',
            'content' => http_build_query($data)
        )
    );
    $context = stream_context_create($options);
    $result = file_get_contents($api_url, false, $context);
    return $result;
}

api.php的第一行是:

echo "<pre>"; print_r($_SERVER); echo "</pre>";

在那个输出中,我看到了:

[REQUEST_METHOD] => GET

如何/为何会发生这种情况?

还值得一提的是,在GAE的SDK上测试此代码时,该方法显示为POST。

1 个答案:

答案 0 :(得分:0)

我把它解决了,我需要回答我自己的问题,因为这是一个很糟糕的事情!

虽然网址是http $api_url = 'http://myapp.com/api.php';,但根据其他所有内容,GAE app.yaml文件按照https的所有脚本提供服务:

- url: /(.+\.php)$
  script: \1
  secure: always

这意味着上面调用我的函数的页面是http s ,因此api调用不像Cross-orgin source sharing那样请求。

解决方案是将$api_url更改为http s