2012-05-03 49 views
6

Có tương đương với curl --resolve .... trong thư viện CURL PHP không?curl --định nghĩa tương đương trong thư viện CURL PHP

Thông tin cơ bản: Tôi có DNS vòng tròn (một tên miền phân giải thành nhiều IP) và tôi muốn gửi yêu cầu tới máy chủ cụ thể cụ thể. Tôi sử dụng máy chủ ảo dựa trên tên apache và do đó tên miền chính xác phải xuất hiện trong yêu cầu HTTP.

Tôi đã thử chỉ định IP trong URL yêu cầu: curl_setopt($ch, CURLOPT_URL, '127.0.0.1') và sử dụng curl_setopt($ch, CURLOPT_HTTPHEADER, 'Host: example.com'). Nó hoạt động cho HTTP, nhưng đối với HTTPS tôi nhận được lỗi xác minh SSL (rõ ràng CURL xác minh chứng chỉ so với tên máy chủ URL và NOT Host: tên máy chủ).

Sử dụng hosts tệp không phải là một tùy chọn thuận tiện.

Trả lời

10

Đầu tiên, cách tốt nhất để nhận câu trả lời cho cách bất kỳ tùy chọn nào curl chuyển thành libcurl (hoặc PHP/CURL) bằng cách sử dụng tùy chọn --libcurl.

Nếu bạn làm như vậy, bạn sẽ biết rằng --resolve chuyển thành CURLOPT_RESOLVE bằng libcurl, được hỗ trợ trong PHP since 5.5.0. Được hỗ trợ bởi libcurl kể từ 7.21.3.

+0

Cảm ơn rất nhiều. Thật không may PHP/CURL không hỗ trợ CURLOPT_RESOLVE (nó nằm trong thân cây nhưng chưa được tích hợp vào bản phát hành ổn định). – Sandman4

+0

'CURLOPT_RESOLVE' hiện được hỗ trợ bởi PHP/CURL. Điều này đã được thêm vào trong PHP 5.5.0 ([Changelog] (http://php.net/ChangeLog-5.php#5.5.0)) –

+0

Lưu ý rằng bạn phải cài đặt phiên bản lib curl hỗ trợ nó. Ngay cả khi bạn có PHP 5.5.38 như tôi làm, nếu phiên bản libcurl cơ bản của bạn là <7.21.3 nó sẽ không hoạt động! – nvahalik

1

Tôi có giải pháp cho điều này với sự trợ giúp của Python.

Trong file .php, chỉ vang đầu ra của python:

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

Trong 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

nếu bạn đang làm phiền đến ngã ba quá trình khác, curl chỉ ngã ba chính nó với tùy chọn "--resolve" so với một tập lệnh khác.