Я пытаюсь получить XML из службы данных в моем учреждении, используя PHP и cURL (libcurl). Разработка выполняется на моей локальной машине. Это код, который eval'd в PHP является частью модуля Drupal и Transformations.
Он поддерживает SSL, как показано на рисунке:
$curl-config --features
(из libcurl docs )
SSL
IPv6
libz
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) }
Когда я сам посещаю сайт, он просто загружается. Я даже установил подпись агента точно так же, как и моя.
Любая помощь будет оценена по достоинству.
Для меня добавление curl_setopt($ch, CURLOPT_SSLVERSION, 3);
волшебно решил проблему!
Он работает сейчас, когда я загружаю его на свой сервер. Я пытался это сделать с моего Mac OSX 10.6.7, который, похоже, блокирует порт 443, обычно используемый для протокола HTTPS. Я не мог найти способ открыть его или выяснить, почему он был заблокирован.
Но мой скрипт отлично работает за пределами моей локальной машины .
Спасибо, что помогли до сих пор.