2012-05-03 8 views
6

PHP CURL 라이브러리에 curl --resolve ....에 해당하는 항목이 있습니까?PHP CURL 라이브러리에서 curl --resolve와 동등 함

배경 : 라운드 로빈 DNS (하나의 도메인 이름이 여러 IP로 확인 됨)가 있으며 특정 호스트로 요청을 보내려고합니다. 아파치 이름 기반의 가상 호스트를 사용하기 때문에 정확한 도메인 이름이 HTTP 요청에 나타나야합니다.

요청 URL에 curl_setopt($ch, CURLOPT_URL, '127.0.0.1')의 IP를 지정하고 curl_setopt($ch, CURLOPT_HTTPHEADER, 'Host: example.com')을 사용하여 IP를 지정하려고했습니다. HTTP에서 작동하지만 HTTPS의 경우 SSL 확인 오류가 발생합니다 (CURL은 인증서와 URL 호스트 이름을 확인하고 Host: 호스트 이름이 아님).

hosts 파일을 사용하는 것은 편리한 옵션이 아닙니다.

답변

10

먼저 임의의 curl 옵션이 libcurl (또는 PHP/CURL)으로 변환되는 방법에 대한 답변을 얻는 가장 좋은 방법은 --libcurl 옵션을 사용하는 것입니다.

--resolvesince 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 ([변경 내용] (http://php.net/ChangeLog-5.php#5.5.0))에 추가되었습니다. –

+0

지원하는 lib curl 버전이 있어야합니다. 내가하는 것처럼 PHP 5.5.38을 사용하더라도 기본 libcurl 버전이 <7.21.3 인 경우 작동하지 않습니다! – nvahalik

1

저는 파이썬으로이 문제에 대한 해결책을 가지고 있습니다.

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

python.py에서 :

가 .PHP 파일에서 파이썬의 출력 에코 당신이 다른 프로세스를 포크로 귀찮게하려는 경우

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

을, 단지 포크 컬 그 자체는 "--resolve"옵션과 다른 스크립트를 비교합니다.