PHPとcURL(libcurl)を使用して、私の機関のデータサービスからXMLを取得しようとしています。私のローカルマシンで開発が行われています。これはDrupalとTransformationsモジュールの一部としてPHPでevalされるコードです。古い証明書でHTTPSページを呼び出すときのcURLタイムアウト
走行から示されるように、それは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)
}
私はそれだけで負荷サイトを自分自身を訪問
。私はエージェントの署名を自分のものと全く同じに設定しています。ご協力いただければ幸いです。
それはあなたのために働いていないことはかなり奇妙です。私は上記のコードをコピーし、コマンドライン(Mac上で)を実行し、それは魅力的なように働いた。 'curl_setopt($ ch、CURLOPT_VERBOSE、1);'を追加しようとしていて、追加情報が何らかの形で役立つかどうか確認してください。 –
お試しいただきありがとうございます。私はこれをDrupalのモジュールの一部として使用しています。それが原因かもしれません。モジュールまたはdrupalの中にcURL設定を変更しているかもしれませんが、自分のインスタンスを作成しているので分かりません。私の投稿にもこれを追加し、あなたが私に与えたものを追加してみましょう。 – JeroenEijkhof
実際には、それをDrupalの外で実行しているのと同じ問題です。今私はヒントはありません。 – JeroenEijkhof