2012-05-03 41 views
6

Czy istnieje odpowiednik dla curl --resolve .... w bibliotece PHP CURL?Curl --resolve odpowiednik w bibliotece PHP CURL

Kontekst: Posiadam usługę DNS typu "round-robin" (jedna nazwa domeny jest rozpoznawana dla wielu adresów IP) i chcę wysłać żądanie do hosta o konkretnej nazwie , pod numerem. Używam hostów wirtualnych opartych na nazwach apache, dlatego poprawna nazwa domeny musi pojawić się w żądaniu HTTP.

Podjęto próbę określenia adresu IP w adresie URL żądania: curl_setopt($ch, CURLOPT_URL, '127.0.0.1') i przy użyciu curl_setopt($ch, CURLOPT_HTTPHEADER, 'Host: example.com'). Działa dla HTTP, ale dla HTTPS otrzymuję błąd weryfikacji SSL (podobno CURL weryfikuje certyfikat względem nazwy hosta URL i NOT Host: nazwy hosta).

Użycie pliku hosts nie jest wygodną opcją.

Odpowiedz

10

Po pierwsze, najlepszym sposobem uzyskania odpowiedzi na pytanie, w jaki sposóbdowolna opcja zwijania tłumaczy się na libcurl (lub PHP/CURL), jest użycie opcji --libcurl.

Jeśli to zrobisz, dowiesz się, że --resolve tłumaczy się na CURLOPT_RESOLVE z libcurl, obsługiwane w PHP since 5.5.0. Obsługiwany przez libcurl od 7.21.3.

+0

Wielkie dzięki. Niestety PHP/CURL nie obsługuje jeszcze CURLOPT_RESOLVE (jest w bagażniku, ale jeszcze nie jest włączony do stabilnego wydania). – Sandman4

+0

'CURLOPT_RESOLVE' jest teraz obsługiwany przez PHP/CURL. Zostało to dodane w PHP 5.5.0 ([Changelog] (http://php.net/ChangeLog-5.php#5.5.0)) –

+0

Pamiętaj, że musisz mieć zainstalowaną wersję biblioteki curl, która ją obsługuje. Nawet jeśli masz PHP 5.5.38 tak jak ja, jeśli twoja podstawowa wersja libcurl jest <7.21.3, to nie zadziała! – nvahalik

1

Mam rozwiązanie tego z pomocą Pythona.

W pliku .php, tylko echo wyjście pytona:

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

W 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

jeśli zamierzamy niepokoić bulić inny proces, po prostu widelec curl sama z opcją "--resolve", a nie kolejnym skryptem.