2011-07-04 3 views
2

PHPとcURL(libcurl)を使用して、私の機関のデータサービスからXMLを取得しようとしています。私のローカルマシンで開発が行われています。これはDrupalとTransformationsモジュールの一部としてPHPでevalされるコードです。古い証明書でHTTPSページを呼び出すときのcURLタイムアウト

走行から示されるように、それはSSLをサポートしている:ある

$curl-config --featureslibcurl 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) 
} 

私はそれだけで負荷サイトを自分自身を訪問

。私はエージェントの署名を自分のものと全く同じに設定しています。

ご協力いただければ幸いです。

+1

それはあなたのために働いていないことはかなり奇妙です。私は上記のコードをコピーし、コマンドライン(Mac上で)を実行し、それは魅力的なように働いた。 'curl_setopt($ ch、CURLOPT_VERBOSE、1);'を追加しようとしていて、追加情報が何らかの形で役立つかどうか確認してください。 –

+0

お試しいただきありがとうございます。私はこれをDrupalのモジュールの一部として使用しています。それが原因かもしれません。モジュールまたはdrupalの中にcURL設定を変更しているかもしれませんが、自分のインスタンスを作成しているので分かりません。私の投稿にもこれを追加し、あなたが私に与えたものを追加してみましょう。 – JeroenEijkhof

+0

実際には、それをDrupalの外で実行しているのと同じ問題です。今私はヒントはありません。 – JeroenEijkhof

答えて

0

これはサーバーにアップロードするときに機能します。私はMac OSX 10.6.7からHTTPSプロトコルでよく使われるポート443をブロックしようとしていました。私はそれを開く方法やブロックされた理由を見つける方法を見つけることができませんでした。

しかし、私のスクリプトはローカルマシンの外でで正常に動作します。

ご協力いただきありがとうございます。

1

私にとっては、curl_setopt($ch, CURLOPT_SSLVERSION, 3);を追加すると魔法の問題が解決しました!

+0

これはママは非常に一般的な問題です。デフォルトのSSLバージョンは2に設定されていますが、opensslモジュールではそれ以上サポートされていません。 – Stony

関連する問題