我正在开展一个项目,我正在使用api与单独网站上的电子商务商店进行交互。我可以通过api将项目添加到篮子中,并使用cURLS CookieJar来保存状态。要结账,我想只想链接到主要电子商务网站上的实际结账流程。我需要能够将存储在CookieJar中的cookie与重定向请求一起发送。
我尝试使用cURL抓取cookie,然后按照重定向,但我误解了它是如何工作的。它不是重定向浏览器,而是根据302重定向发出新的cURL请求。
$curlopt = array(
CURLOPT_COOKIEJAR => xxx, // this is the path to the cookie file
CURLOPT_COOKIEFILE => xxx, // this is the path to the cookie file
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_AUTOREFERER => true,
CURLOPT_URL => 'http://mydomain.com/redirect_to_ecommerce_checkout.php'
);
$ch = curl_init(); // run curl
curl_setopt_array($ch, $curlopt);
curl_exec($ch);
curl_close($ch);
这似乎将正确的Cookie发送到电子商务页面,问题是浏览器没有重定向,而是从我的域上的主电子商务网站呈现HTML。
如何设置请求Cookie并实际执行重定向?
提前致谢。
答案 0 :(得分:0)
我认为你只需告诉CURL给你标题而不是按照重定向。然后,您可以解析“Location:”标题。像这样:
$curlopt = array(
CURLOPT_COOKIEJAR => xxx, // this is the path to the cookie file
CURLOPT_COOKIEFILE => xxx, // this is the path to the cookie file
CURLOPT_FOLLOWLOCATION => false, // <--- change to false so curl does not follow redirect
CURLOPT_AUTOREFERER => true,
CURLOPT_URL => 'http://mydomain.com/redirect_to_ecommerce_checkout.php',
CURLOPT_HEADER => true,
CURLOPT_RETURNTRANSFER => true // Return transfer string instead of outputting directly
);
$ch = curl_init($url);
curl_setopt_array($ch, $curlopt);
$response = curl_exec($ch); // save response to a variable
curl_close($ch);
// try to find Location header in $response
preg_match_all('/^Location:(.*)$/mi', $response, $matches);
if (!empty($matches[1])) {
header("Location: " . trim($matches[1][0]) );
exit;
}
else {
echo 'No redirect found';
}
注意我设置了CURLOPT_FOLLOWLOCATION =&gt; false,CURLOPT_HEADER =&gt; true,和CURLOPT_RETURNTRANSFER =&gt;是,然后检查我在$ response中保存的curl_exec()响应。
您也可以尝试:
header("Location: " . curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);