【发布时间】:2011-09-27 20:22:25
【问题描述】:
我正在尝试使用 PHP 和 cURL (libcurl) 从我所在机构的数据服务中获取 XML。正在我的本地机器上进行开发。它是在 PHP 中作为 Drupal 和 Transformations 模块的一部分进行评估的代码。
它具有 SSL 支持,如运行所示:
$curl-config --features (来自libcurl docs)
SSL
IPv6
库
NTLM
正在执行的 PHP 代码:
/**
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an
* array containing the HTTP server response header fields and content.
* FROM: http://bit.ly/lNIlOu
*/
function get_web_page( $url )
{
$agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30';
//$agent = 'spider';
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page if successful
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => $agent, // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_SSL_VERIFYPEER => false, // Disabled SSL Cert checks
CURLOPT_SSL_VERIFYHOST => false, // Disable host checks ?
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
$url = 'https://ws.admin.washington.edu/student/v4/public/section.xml?year=2011&quarter=autumn&curriculum_abbreviation=BIOL&course_number=&id=&search_by=Instructor';
$result = get_web_page($url);
echo '<pre>CURL result:<br/>';
var_dump($result);
echo '</pre>';
转储 $ch 的精简版:
array(24) {
["url"]=>
string(155) "https://ws.admin.washington.edu/student/v4/public/section.xml?year=2011&quarter=autumn&curriculum_abbreviation=BIOL&course_number=&id=&search_by=Instructor"
["content_type"]=>
NULL
["http_code"]=>
int(0)
["header_size"]=>
int(0)
["request_size"]=>
int(237)
...
["ssl_verify_result"]=>
int(20)
["redirect_count"]=>
int(0)
["total_time"]=>
float(120.41427)
...
["connect_time"]=>
float(0.11626)
...
["certinfo"]=>
array(0) {
}
["errno"]=>
int(28)
["errmsg"]=>
string(67) "Operation timed out after 120000 milliseconds with 0 bytes received"
["content"]=>
bool(false)
}
当我自己访问该网站时,它只会加载。我什至将代理签名设置为与我自己的完全相同。
任何帮助将不胜感激。
【问题讨论】:
-
这很奇怪,它不适合你。我复制了上面的代码并通过命令行(在 Mac 上)运行它,它就像一个魅力。尝试添加
curl_setopt($ch, CURLOPT_VERBOSE, 1);并查看附加信息是否有任何帮助。 -
感谢您试用。我将其用作 Drupal 中模块的一部分,这可能是原因,模块或 drupal 中的某些内容可能更改了 cURL 设置,但由于我正在创建自己的实例,所以我不明白。也会将此添加到我的帖子中,并尝试添加您给我的内容。
-
实际上只是简单地在 Drupal 外部运行它会出现同样的问题。现在我不知道了。
-
您是否尝试过添加上面的详细设置?
-
也可以在我的终端上使用。不过必须添加
--insecure选项。
标签: php drupal curl https libcurl