我想做以下情况,但我真的不知道这是否可行或我需要使用哪种技术:
所以我使用外部api来存储我的Web应用程序的信息。现在我想将api请求发送到我的服务器,它可以通过使用curl将其发送到api服务器并等待响应..当我收到响应时我在我的服务器上更新了一些东西,比如在mysql中插入行并发回响应请求者
现在api url正在使用https,而我的服务器当前正在使用http ..这将是一个问题来测试还是我还需要https?
我该如何使用php实现这个?也许某种重定向?或者我是否必须重建整个请求?
提前致谢
答案 0 :(得分:0)
关于你的问题有很多未知因素很难回答,但这里有。
您当然不必通过HTTPS提供自己的应用程序,您可以查询HTTPS API,然后通过HTTP提供自己的响应。我应警告您,通过这样做,您本身就可以使外部服务更少安全。如果您作为外部服务的代理,我建议您获得SSL证书并以正确的方式执行。
您的问题中缺少详细信息使得很难回答特定问题,但这里有一个小代码块可以帮助您入门:
<?php
$url = "https://service/endpoint";
$params = array(
'api_token' => 'mytoken',
'param1' => 'myparam',
);
$url .= http_build_query($params);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'received error: ' . curl_error($ch) . ' (code: ' . curl_errno($ch);
} else {
echo 'received response: ' . $result;
}
答案 1 :(得分:0)
nate所说的大致是正确的,但如果您想使用cURL从HTTP发布到HTTPS,请同时设置此选项:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
这会阻止cURL验证对等方的证书(我猜你不关心在第二台服务器和API之间使用SSL)。
应用服务器上的代码:
$data = http_build_query(
// Your parameters go here
);
file_get_contents('http://middleserverurl.com/?' . $data);
中间服务器上的代码:
$apiurl = "https://apiurl.com/?" . http_build_query($_GET);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
// Decode the result data here
// Insert into your database here
// Send something back to your app server e.g.:
$data = http_build_query(
// What you want to send back form the result
);
file_get_contents('http://appserverurl.com/?' . $data);