2012-05-03 15 views
6

PHP CURLライブラリにcurl --resolve ....の相当品はありますか?PHP CURLライブラリでcurl --resolve相当のものがあります

背景:ラウンドロビンDNS(1つのドメイン名が複数のIPに解決されます)があり、の特定のホストにリクエストを送信したいとします。私はApacheベースの仮想ホストを使用しているので、正しいドメイン名がHTTP要求に現れなければなりません。

リクエストURLにcurl_setopt($ch, CURLOPT_URL, '127.0.0.1')というIPを指定してみましたが、curl_setopt($ch, CURLOPT_HTTPHEADER, 'Host: example.com')を使用しました。それはHTTPで動作しますが、HTTPSではSSL検証エラーが発生します(CURLは証明書とURLのホスト名を確認し、ホスト名はHost:ではないことが明らかです)。

hostsファイルを使用するのは便利なオプションではありません。

答えて

10

まず、任意の curlオプションがlibcurl(またはPHP/CURL)に変換される方法の回答を得る最良の方法は、--libcurlオプションを使用することです。

--resolveは、since 5.5.0でサポートされているlibcurlでCURLOPT_RESOLVEに変換されています。 7.21.3からlibcurlでサポートされています。

+0

ありがとうございます。残念ながら、PHP/CURLはまだCURLOPT_RESOLVEをサポートしていません(トランクにありますが、まだ安定版に組み込まれていません)。 – Sandman4

+0

PHP/CURLで 'CURLOPT_RESOLVE'がサポートされるようになりました。これはPHP 5.5.0([Changelog](http://php.net/ChangeLog-5.php#5.5.0))に追加されました –

+0

これをサポートするlib curlがインストールされている必要があります。 PHP 5.5.38を持っていても、libcurlの基本バージョンが<7.21.3であれば動作しません! – nvahalik

1

私はこれをPythonの助けを借りて解決しました。 .phpのファイルで

、ちょうどのpythonの出力をエコー:python.pyで

<?php 
echo passthru("python python.py"); 
?> 

import httplib 
conn = httplib.HTTPSConnection('127.0.0.1'); 
url = "example.com" 
conn.request("GET", url) 
content = conn.getresponse() 
print content.read() 
conn.close() 
0

あなたが別のプロセスをforkする気にしようとしている場合は、ちょうどフォークカールをそれ自体は "--resolve"オプションとは別のスクリプトです。