使用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。
答案 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 。