将值过帐到API的现有方法
根据API文档,必须使用一些输入字段和客户令牌字段将表单发布到API URL(method =“POST”和action =“API_URL”)。 API处理然后将响应发布到我的服务器上的callback.php文件(已修复 - 无法更改)。该页面重定向到API URL,然后返回到callback.php。我可以使用该文件中的$_POST
访问发布的val。这就是现有的方法,它运行正常。
服务器端帖隐藏客户令牌
出于安全考虑,我这次试图从服务器端发帖。
问题
回调没有发生(callback.php文件中的代码没有执行)。
在使用cURL进行硬化后发布到API并接收回调之后,我意识到open_basedir是在我的服务器中设置的,因为CURLOPT_FOLLOWLOCATION
。我找到了以下代码,即使safe_mode
设置为On
或open_basedir
,也可以完成发布,前提是
我们通常知道我们会在哪里 重定向到
请仔细阅读下面的代码,并告诉我if we know generally where we'll be redirected to
这里的含义。它是处理完成后API将重定向到的URL吗?然后是的我知道,它必须将回调发送到我的服务器上的callback.php文件,但这不会发生。
: -
function curl($url, $postVars)
{
$go = curl_init($url);
curl_setopt ($go, CURLOPT_URL, $url);
curl_setopt($go, CURLOPT_VERBOSE, 1);
//follow on location problems
if (ini_get('open_basedir') == '' && (ini_get('safe_mode')== 'Off'))
{
curl_setopt ($go, CURLOPT_FOLLOWLOCATION, $l);
$syn = curl_exec($go);
if(curl_error($go))
return false;
}
else
$syn = curl_redir_exec($go, $postVars);
curl_close($go);
return $syn;
}
function curl_redir_exec($ch, $postVars)
{
static $curl_loops = 0;
static $curl_max_loops = 20;
if ($curl_loops++>= $curl_max_loops)
{
$curl_loops = 0;
return FALSE;
}
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postVars);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$data = curl_exec($ch);
if(curl_error($ch))
return false;
list($header, $data) = explode("\n\r", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$redirect_page = "[0-9]*.html";
$base_redirect = "http://example.com/";
if ($http_code == 301 || $http_code == 302)
{
$matches = array();
$pregs = eregi($redirect_page, $data, $matches);
$new_url = $base_redirect . $matches[0];
if (!$new_url)
{
//couldn't process the url to redirect to
$curl_loops = 0;
return $data;
}
curl_setopt($ch, CURLOPT_URL, $new_url);
return curl_redir_exec($ch, $postVars);
}
else
{
$curl_loops=0;
return $data;
}
}
在运行代码时,它进入条件$http_code
既不是301
也不是302
(在我的情况下是200
)。打印$ data提供以下内容: -
HTTP/1.1 200 OK Date: Wed, 01 Sep 2010 10:02:44 GMT Server: Apache/2 X-Powered-By: PHP/5.2.11 Content-Length: 0 Connection: close Content-Type: text/html
帮助
帮帮我们..
任何代码都需要更改吗?
cURL在我的情况下不起作用吗? (它是一个异步API - 它在完成后触发回调。原始请求在这种设置中没有收到返回值。)
由于 Sandeepan
答案 0 :(得分:0)
您应该检查网址是cURL请求的内容(echo $ new_url;)