Mam zamiar użyć PHP na proste wymaganie. Muszę pobrać zawartość XML z adresu URL, do którego muszę wysłać żądanie HTTP GET do tego adresu URL.Jak wysłać żądanie GET z PHP?
Jak to zrobić w PHP?
Mam zamiar użyć PHP na proste wymaganie. Muszę pobrać zawartość XML z adresu URL, do którego muszę wysłać żądanie HTTP GET do tego adresu URL.Jak wysłać żądanie GET z PHP?
Jak to zrobić w PHP?
ile trzeba więcej niż tylko zawartość pliku, można użyć file_get_contents
.
$xml = file_get_contents("http://www.example.com/file.xml");
Dla czegoś bardziej złożonego użyłbym cURL.
http_get
powinien załatwić sprawę. Zalety usługi http_get
przez file_get_contents
obejmują możliwość wyświetlania nagłówków HTTP, szczegółów żądania dostępu i kontrolowania limitu czasu połączenia.
$response = http_get("http://www.example.com/file.xml");
Dla bardziej zaawansowanych żądań GET/POST, można zainstalować biblioteki 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);
Chociaż tak naprawdę nie ma potrzeby używania CURL do "prostego wymogu", +1 , ponieważ jest to naprawdę najlepsze rozwiązanie do robienia czegoś bardziej zaawansowanego z żądaniami HTTP w PHP. – xyz
Jak już wspomniano, curl jest znacznie szybszy niż 'file_get_contents()'. Prosty 4-literowy ciąg trwał około 10 sekund, natomiast curl trwał rozsądniej ~ 1 sekundę maksimum. –
@pgmann jesteś pewien w tym wyniku? nie jest to zgodne z innymi statystykami z cytowanymi danymi. Rzeczywiście, CURL jest szybszy, ale nie powinien być znacznie szybszy. Może ten spadek czasu odpowiedzi pochodzi z buforowania po stronie serwera jakiegoś zasobu itp.? Może powinieneś powtórzyć test? –
W zależności od tego, czy konfiguracja php pozwala fopen na adresach URL, można też po prostu fopen url z GET Argumenty w ciągu znaków (np.)
Edycja: Ponowne czytanie pytania Nie jestem pewien, czy chcesz przekazać zmienne, czy nie - jeśli nie możesz, możesz po prostu wysłać prośbę fopen zawierającą http://example.com/filename.xml - możesz zignorować zmienną = wartość część
Lubię używać otwartych do tego fsockopen.
Pamiętaj, że jeśli używasz proxy trzeba zrobić małą sztuczkę w kodzie PHP:
(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;
?>
W drugiej strony, za pomocą REST API z innych serwerów są bardzo popularne w PHP. Załóżmy, że szukasz sposobu przekierowania niektórych żądań HTTP na inny serwer (na przykład pobranie pliku xml). Oto pakiet PHP pomóc:
https://github.com/romanpitak/PHP-REST-Client
Więc coraz plik XML:
$client = new Client('http://example.com');
$request = $client->newRequest('/filename.xml');
$response = $request->getResponse();
echo $response->getParsedResponse();
Jest to poprawne, chyba że musisz użyć parametrów ciągu zapytania. – Raptor
@musicfreak: ciąg zapytania jest czasami ignorowany przez niektóre serwery w celu ustawienia zabezpieczeń. również zapytanie na różnych serwerach może spowodować ten błąd: 'nie udało się otworzyć strumienia: żądanie HTTP nie powiodło się!' – Raptor
@ShivanRaptor: Nie jestem pewien, o czym mówisz ... Ciąg zapytania jest po prostu częścią ciągu . Nie ma powodu, dla którego serwer zignorowałby to. Oczywiście, 'file_get_contents' nie pozwala ci na tworzenie niestandardowych plików cookie, nagłówków i innych rzeczy, które zazwyczaj wysyła przeglądarka, więc możesz nie otrzymać odpowiedzi, której szukasz. W takim przypadku najlepiej byłoby użyć CURL. (Ale to nie jest przypadek PO). –