Pracuję nad skonfigurowaniem przetwarzania kart kredytowych i muszę zastosować obejście dla CURL. Poniższy kod działał dobrze, gdy korzystałem z serwera testowego (który nie wywoływał adresu URL SSL), ale teraz, gdy testuję go na działającym serwerze z HTTPS, kończy się niepowodzeniem z komunikatem o błędzie „nie udało się otworzyć strumienia”.
function send($packet, $url) {
$ctx = stream_context_create(
array(
'http'=>array(
'header'=>"Content-type: application/x-www-form-urlencoded",
'method'=>'POST',
'content'=>$packet
)
)
);
return file_get_contents($url, 0, $ctx);
}
php
curl
https
file-get-contents
James Simpson
źródło
źródło
Aby zezwolić na opakowanie https:
php_openssl
rozszerzenie musi istnieć i być włączonyallow_url_fopen
musi być ustawiony naon
W pliku php.ini powinieneś dodać te linie, jeśli nie istnieje:
źródło
Spróbuj wykonać następujące czynności.
źródło
Umożliwi to pobranie treści z adresu URL, niezależnie od tego, czy jest to HTTPS
źródło
Jest to prawdopodobnie spowodowane tym, że serwer docelowy nie ma ważnego certyfikatu SSL.
źródło
Po prostu dodaj dwie linie do pliku php.ini.
extension=php_openssl.dll
allow_url_include = On
to działa dla mnie.
źródło
allow_url_fopen
ponieważ pytanie dotyczy otwierania adresu URL, bez uwzględniania.Miałem ten sam błąd. Ustawienie
allow_url_include = On
naphp.ini
stałe to dla mnie.źródło
HTTPS jest obsługiwany począwszy od PHP 4.3.0, jeśli skompilowałeś obsługę OpenSSL. Upewnij się również, że serwer docelowy ma ważny certyfikat, zapora sieciowa zezwala na połączenia wychodzące,
allow_url_fopen
aw php.ini jest ustawiona na true.źródło
W moim przypadku problem wynikał z tego, że WAMP używał innego php.ini dla CLI niż Apache, więc ustawienia dokonane za pomocą menu WAMP nie dotyczą CLI. Po prostu zmodyfikuj CLI php.ini i działa.
źródło
Czasami serwer nie odpowiada na podstawie tego, co widzi lub czego nie widzi w nagłówkach żądań http (na przykład odpowiedni agent użytkownika). Jeśli możesz połączyć się z przeglądarką, chwyć wysyłane przez nią nagłówki i naśladuj je w kontekście swojego strumienia.
źródło
Utknąłem z niedziałającym protokołem HTTPS w usługach IIS. Rozwiązany:
file_get_contents („https ..) nie wczytuje się.
edytuj php.ini za pomocą:
curl.cainfo = "C: \ Program Files \ PHP \ v7.3 \ extras \ ssl \ cacert.pem" openssl.cafile = "C: \ Program Files \ PHP \ v7.3 \ extras \ ssl \ cacert.pem"
Wreszcie!
źródło
ABY SPRAWDZIĆ, CZY URL JEST, CZY NIE JEST
Kod w Twoim pytaniu można przepisać do działającej wersji:
źródło