cURL忽略了选项

时间:2014-06-21 21:13:00

标签: php curl

以下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版本太旧了吗?这里发生了什么?

1 个答案:

答案 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);