Câu trả lời:
Trừ khi bạn cần nhiều hơn chỉ là nội dung của tệp, bạn có thể sử dụng file_get_contents
.
$xml = file_get_contents("http://www.example.com/file.xml");
Đối với bất cứ điều gì phức tạp hơn, tôi sẽ sử dụng cURL .
failed to open stream: HTTP request failed!
file_get_contents
không cho phép bạn thực hiện yêu cầu với cookie, tiêu đề và các thứ khác mà trình duyệt thường gửi, do đó bạn có thể không nhận được phản hồi mà bạn đang tìm kiếm. Trong trường hợp đó, dù sao bạn cũng nên sử dụng CURL. (Nhưng đó không phải là trường hợp của OP.)
Đối với các yêu cầu GET / POST nâng cao hơn, bạn có thể cài đặt thư viện CURL ( http://us3.php.net/curl ):
$ch = curl_init("REMOTE XML FILE URL GOES HERE"); // such as http://example.com/example.xml
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
file_get_contents()
. Một chuỗi 4 chữ cái đơn giản mất khoảng 10 giây với nó, trong khi curl mất tối đa hợp lý hơn ~ 1 giây.
http_get
nên làm thủ thuật. Các ưu điểm của http_get
hơn file_get_contents
bao gồm khả năng xem các tiêu đề HTTP, chi tiết yêu cầu truy cập và kiểm soát thời gian chờ kết nối.
$response = http_get("http://www.example.com/file.xml");
Hãy nhớ rằng nếu bạn đang sử dụng proxy, bạn cần thực hiện một mẹo nhỏ trong mã php của mình:
(PROXY WITHOUT AUTENTICATION EXAMPLE)
<?php
$aContext = array(
'http' => array(
'proxy' => 'proxy:8080',
'request_fulluri' => true,
),
);
$cxContext = stream_context_create($aContext);
$sFile = file_get_contents("http://www.google.com", False, $cxContext);
echo $sFile;
?>
Tùy thuộc vào việc thiết lập php của bạn có cho phép fopen trên URL hay không, bạn cũng có thể chỉ cần mở url bằng các đối số get trong chuỗi (chẳng hạn như http://example.com?variable=value )
Chỉnh sửa: Đọc lại câu hỏi Tôi không chắc chắn liệu bạn có muốn chuyển các biến hay không - nếu bạn không, bạn chỉ có thể gửi yêu cầu fopen tiếp theo http://example.com/filename.xml - hãy thoải mái bỏ qua biến = phần giá trị
Tôi thích sử dụng fsockopen mở cho việc này.
Mặt khác, sử dụng API REST của các máy chủ khác rất phổ biến trong PHP. Giả sử bạn đang tìm cách chuyển hướng một số yêu cầu HTTP sang máy chủ khác (ví dụ: nhận tệp xml). Đây là gói PHP giúp bạn:
https://github.com/romanpitak/PHP-REST-Client
Vì vậy, nhận tệp xml:
$client = new Client('http://example.com');
$request = $client->newRequest('/filename.xml');
$response = $request->getResponse();
echo $response->getParsedResponse();
Guheads là một thư viện rất nổi tiếng, giúp thực hiện tất cả các loại cuộc gọi HTTP cực kỳ dễ dàng. Xem https://github.com/guheads/guheads . Cài đặt với composer require guzzlehttp/guzzle
và chạy composer install
. Bây giờ mã dưới đây là đủ cho một cuộc gọi http.
$client = new \GuzzleHttp\Client();
$response = $client->get('https://example.com/path/to/resource');
echo $response->getStatusCode();
echo $response->getBody();