Czym te dwa fragmenty kodu różnią się podczas uzyskiwania dostępu do interfejsu API REST?
$result = file_get_contents('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
i
$ch = curl_init('http://api.bitly.com/v3/shorten?login=user&apiKey=key&longUrl=url');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
Sądząc po obu, dają ten sam rezultat
print_r(json_decode($result))
php
curl
file-get-contents
Salvador Dali
źródło
źródło
cURL
jest w stanie znacznie więcej niżfile_get_contents
. To powinno wystarczyć.Odpowiedzi:
file_get_contents()
to prosty śrubokręt. Doskonały do prostych żądań GET, w których nagłówek, metoda żądania HTTP, limit czasu, cookiejar, przekierowania i inne ważne rzeczy nie mają znaczenia.fopen()
z kontekstem strumienia lub cURL z setopt to powerdrills z każdym bitem i opcją, o której możesz pomyśleć.źródło
file_get_contents
pozwala także na ustawienie kontekstu, co oznacza, że możesz dowolnie ustawić pola nagłówka.Oprócz tego, z powodu niedawnych włamań do witryn internetowych, musieliśmy bardziej zabezpieczyć nasze witryny. Robiąc to, odkryliśmy, że file_get_contents nie działa, a curl nadal będzie działać.
Nie w 100%, ale uważam, że to ustawienie php.ini mogło blokować żądanie file_get_contents .
Tak czy inaczej, nasz kod działa teraz z curl .
źródło
file_get_contents
wymagaallow_url_fopen
prawdy.file_get_contents()
tę funkcję z powodu wielu exploitów, o których wiadomo, że korzystają z tej funkcji. cURL to funkcja, której ludzie powinni teraz używać w kodzie.allow_url_fopen
ponieważ mylą toallow_url_include
.allow_url_fopen
ifile_get_contents
są w porządku.file_get_contents()
To stary temat, ale w moim ostatnim teście na jednym z moich API cURL jest szybszy i stabilniejszy. Czasami file_get_contents przy większym żądaniu potrzebuje ponad 5 sekund, gdy cURL potrzebuje tylko od 1,4 do 1,9 sekundy, co jest dwukrotnie szybsze.
Muszę dodać jedną notatkę na ten temat, że po prostu wysyłam GET i odbieram zawartość JSON. Jeśli poprawnie skonfigurujesz cURL, uzyskasz świetną odpowiedź. Po prostu „powiedz”, aby zakreślić, co chcesz wysłać, a co chcesz odebrać i to wszystko.
Na twoim przykładzie chciałbym zrobić taką konfigurację:
To żądanie zwróci dane w ciągu maksymalnie 0,01 sekundy
źródło
file_get_contents
że właśnie wykonałem kilka wywołań API w celu potwierdzenia. 0,8 sekundy dlafile_get_contents
i 0,49 sekundy dlacurl
(3 wywołania API)