以下cURL配置在我的本地计算机上使用cURL 7.30.0正常工作:
$curl = curl_init();
curl_setopt_array($curl, array(
// Just showing the noteworthy options here.
CURLOPT_HTTPHEADER => array("Content-Type: application/x-www-form-urlencoded")
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0,
CURLOPT_COOKIE => "foo=bar",
));
$response = curl_exec($curl);
curl_close($curl);
调试输出的摘录:
> GET / HTTP/1.0
Host: example.com
Accept: */*
Cookie: foo=bar
Content-Type: application/x-www-form-urlencoded
现在,我使用cURL 7.19.7在共享托管环境中运行相同的代码并获取:
> GET / HTTP/1.1
Host: example.com
Accept: */*
Content-Type: application/x-www-form-urlencoded
基本上cURL正常工作99%,但忽略了强制HTTP版本和cookie字符串。托管公司是否正在运行阻止这些功能的配置?他们运行的cURL版本太旧了吗?这里发生了什么?
答案 0 :(得分:2)
我找到了。只要一个选项失败,curl_setopt_array
就会退出处理选项,我不知道。我应该检查返回值,以确保一切顺利。
就我而言,罪魁祸首是选项CURLOPT_FOLLOWLOCATION
。它可能失败,因为托管服务提供商正在使用安全模式,这会禁用以下301/302功能。
$curl = curl_init();
$check = curl_setopt_array($curl, $options);
if(!$check)
die("Ye be warned: one of your options did not make it.");
$response = curl_exec($curl);
curl_close($curl);