curl: (1) Protokół https nie jest obsługiwany lub wyłączony w libcurl

162

Próbuję zainstalować środowiska Rails na Ubuntu 11.04. Po uruchomieniu polecenia rvm install 1.9.2 --with-openssl-dir=/usr/localpojawia się następujący błąd:

curl : (1) Protocol https not supported or disabled in libcurl

Jak można to rozwiązać?

Giuseppe Di Federico
źródło
Co się stanie, jeśli nie użyjesz --with-openssl-dir=/usr/local(tj. Po prostu rvm install 1.9.2)?
Omri Barel
ten sam problem, myślałem, że - z ... to obejście
Giuseppe Di Federico,
1
Trudno mi uwierzyć, że twój curl nie obsługuje HTTPS. Możliwe, że rvm ma własne curl lub że nie zainstalowałeś curl ( sudo apt-get install curl). Spróbuj curl -o "google.html" https://google.comsprawdzić, czy obsługiwany jest protokół HTTPS.
Omri Barel
Mam ten sam komunikat o błędzie z RCurl.
izomorfizm
zaskoczony, że nie ma akceptowanej odpowiedzi na ten temat.
jbrahy

Odpowiedzi:

295

Mam odpowiedź TUTAJ dla okien, jest tam napisane, że:

curl -XPUT 'http://localhost:9200/api/twittervnext/tweet'

Ups, najpierw spróbuj i już błąd:

curl: (1) Protocol 'http not supported or disabled in libcurl

Przyczyna tego błędu jest trochę głupia, system Windows nie lubi tego, gdy używasz apostrofów dla poleceń . Więc poprawne polecenie to:

curl XPUT "http://localhost:9200/api/twittervnext/tweet"
cnlevy
źródło
2
użyj zamiast tego cURL curl.haxx.se/latest.cgi?curl=win64-ssl-sspi z obsługą SSL w systemie Windows, jeśli żadna z pozostałych odpowiedzi nie działa w systemie Windows.
ganesh,
6
to jest poprawne i aby dodać trochę soli, jeśli chcesz faktycznie użyć podwójnych cudzysłowów w ciągu, który cytujesz, musisz ich uniknąć, np .: curl "http://localhost:3030/messages/" -H "Content-Type: application/json" --data-binary "{ \"name\":\"Curler\", \"text\": \"Hello from the command line\" }"zamiast curl "http://localhost:3030/messages/" -H "Content-Type: application/json" --data-binary '{ "name":"Curler", "text": "Hello from the command line" }'... zwróć uwagę na pojedyncze i niezmienione podwójne cytaty ze złej części.
Emmanuel Mahuni
@EmmanuelMahuni Dzięki za wskazówkę. Miałem ten sam problem podczas próby CURL z potoku bitbucket, moja wartość zawiera podwójne cudzysłowy (") (jak czytam z odpowiedzi json z aws cli przy użyciu jq), raz po usunięciu podwójnego z początku i końca. To pracował dla mnie. Oto jak to zrobiłem. new_url=$( echo $url | tr -d \" )
Appu Mistri
1
Właśnie zaoszczędziłeś mi DUŻO czasu! Dzięki!
Richard Varno
1
Mając ten sam efekt z curl na macOS.
not2savvy
82

Natknąłem się na ten problem i okazało się, że jest spacja przed tym, httpsktóry był przyczyną problemu. " https://"vs"https://"

jbrahy
źródło
6
I mam to samo. Byłem zaskoczony, dlaczego do diabła dostaję ten błąd. :) +1 za udostępnienie tego.
Awais Qarni
3
Podobny do mnie, to był jeden cytat, bo mieliśmy owinięte wartość domyślna bash z pojedynczego cudzysłowu, choć nie było to konieczne ...
Mathieu Dumoulin
1
To niesamowite, że najwyraźniej był to problem dla tak wielu ludzi - łącznie ze mną. To zdarza się od czasu do czasu, ale wydaje się niejasne. Ach tak. Dzięki
dgo
1
To był problem dla mnie. Dzięki @jbrahy
colecmc
1
Tak, mam to samo. Usunięcie przestrzeni działało dobrze dla mnie.
Amandeep kaur
21

Wygląda na to, że jest już tak wiele odpowiedzi, ale problem, z jakim się spotkałem, dotyczył podwójnych cudzysłowów. Istnieje różnica pomiędzy:

i

"

Zmiana pierwszego podwójnego cudzysłowu na drugi działała dla mnie, poniżej znajduje się przykładowe zawinięcie:

curl -X PUT -u xxx:xxx -T test.txt "https://test.com/test/test.txt"
Pavan_Obj
źródło
Jasne, mój stary.
Pavan_Obj
Ten rozwiązał mój problem.
Hari Ennekat
Cieszę się, że naprawiono :).
Pavan_Obj
11

Napotkałem ten sam problem podczas próby zainstalowania rvm dla ruby. znalazłem rozwiązanie: po wypakowaniu curl (tar) w folderze pobierania w katalogu głównym.

cd /root/Downloads/curl # step-1
./configure --with-ssl # step-2
make # step-3
make install # step-4 (if not root, use sudo before command)

źródło

RT
źródło
9

Rozwiązano ten problem za pomocą flag --with-darwinssl

Przejdź do folderu z kodem źródłowym curl

Pobierz go tutaj https://curl.haxx.se/download.html

sudo ./configure --with-darwinssl
make
make install

zrestartuj konsolę i gotowe!

Максим Мартынов
źródło
8

Jest to szczególnie wspomniane we wpisie FAQ libcurl „ Protokół xxx nie jest obsługiwany lub wyłączony w libcurl ”.

Dla Twojej przyjemności zamieszczam tutaj również wyjaśnienie:

Podczas przekazywania adresu URL do użycia w curl może odpowiedzieć, że określony protokół nie jest obsługiwany lub wyłączony. Szczególny sposób wyrażenia tego komunikatu o błędzie polega na tym, że curl nie rozróżnia wewnętrznie, czy określony protokół nie jest obsługiwany (tj. Nigdy nie został dodany żaden kod, który umie mówić w tym protokole), czy też został wyraźnie wyłączony. curl można zbudować tak, aby obsługiwał tylko określony zestaw protokołów, a reszta byłaby wówczas wyłączona lub nieobsługiwana.

Zwróć uwagę, że ten błąd wystąpi również, jeśli podasz niepoprawnie zapisaną część protokołu, jak w „htpt: //example.com” lub jak w mniej oczywistym przypadku, jeśli poprzedzisz część protokołu spacją, jak w „ http: // przykład .com / ”.

Daniel Stenberg
źródło
10
Nie sądzę, aby ta odpowiedź wyjaśniała OP, co musi zrobić, aby rozwiązać problem.
izomorfizm
3
wyjaśnia, co oznacza komunikat, co oznacza, że ​​jego wiersz poleceń nie wystarczył do zbudowania biblioteki libcurl z włączonym HTTPS
Daniel Stenberg
Ugryziony przez prefiks spacji. Jeśli tylko błąd brzmi „Protokół„ xxx ”nie jest obsługiwany lub wyłączony w libcurl”
topher
8

W moim przypadku protokół HTTPS nie był w pierwszej kolejności obsługiwany przez libcurl. Aby dowiedzieć się, które protokoły są obsługiwane, a które nie, sprawdziłem wersję curl za pomocą polecenia:

curl --version

curl 7.50.3 (x86_64-apple-darwin15.6.0) libcurl/7.50.3 SecureTransport zlib/1.2.5 Zawierał następujące informacje: Protokoły: dict plik ftp ftps gopher http imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Funkcje: IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets

gdzie protokół https nie jest obsługiwany.

Następnie ponownie zainstalowałem curl i zainstalowałem go za pomocą następujących poleceń (po rozpakowaniu):

./configure --with-darwinssl (włącz komunikację ssl w mac) make make test sudo make install

Po kilku minutach pracy problemy zostały rozwiązane!

Następnie ponownie uruchomiłem polecenie curl version, pokazało:

curl 7.50.3 (x86_64-apple-darwin15.6.0) libcurl/7.50.3 SecureTransport zlib/1.2.5 Protokoły: dict plik ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Funkcje: IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets

Pojawił się protokół HTTPS!

Wreszcie przydatna witryna, do której można się odnieść, gdy napotkasz problemy z podkręcaniem. https://curl.haxx.se/docs/install.html

ktoś
źródło
7

Rozwiązuję to po prostu zmieniając się 'http://webname...'na"http://webname..."

Zwróć uwagę na cytat. Powinien być double ( ") zamiast single ( ').

Aminah Nuraini
źródło
tak! To rozwiązało problem, uruchamiając curl w wierszu poleceń systemu Windows. Dziękuję Ci!
Ryano
2

Mój problem wynikał z niewyświetlanego symbolu UTF. Skopiowałem link ze ścieżki nginx i otrzymałem następny w schowku:

0x00000000: e2 80 8b 68 74 74 70 73 3a 2f 2f 73 6b 2e 65 65 2f 75 70 6c 6f 61 64 2f 66 69 6c 65 73 2f 45 53  ...https://sk.ee/upload/files/ES
0x00000020: 54 45 49 44 2d 53 4b 5f 32 30 31 35 2e 70 65 6d 2e 63 72 74                                      TEID-SK_2015.pem.crt            

Symbolem problemu jest 0xe2 0x80 0x8b ZERO WIDTH JOINER , który poprzedza https.

SergA
źródło
1

Ten sam błąd występuje podczas używania curl w witrynie https, takiej jak

curl https://api.dis...

jak wskazał ganesh , było to spowodowane tym, że moja wersja curl nie była obsługiwana przez SSL. wrócił i pobrał wersję z ssl i działało dobrze.

Deepak Rao
źródło
1
Ja też nie widziałem opcji SSL na stronie pobierania.
Patrick Borkowicz
0

Właśnie ponownie skompilowałem curl z opcjami konfiguracji wskazującymi na folder biblioteki openssl 1.0.2g i folder include, i nadal otrzymuję tę wiadomość. Kiedy robię ldd na curl, nie pokazuje, że używa albo libcrypt.soalbo libssl.so, więc zakładam, że musi to oznaczać, że chociaż makei make installpowiodło się bez błędów, to jednak curl nie ma obsługi HTTPS? Konfiguracja i wykonanie wyglądały następująco:

./configure --prefix=/local/scratch/PACKAGES/local --with-ssl=/local/scratch/PACKAGES/local/openssl/openssl-1.0.2g --includedir=/local/scratch/PACKAGES/local/include/openssl/openssl-1.0.2g
make
make test
make install

Powinienem wspomnieć, że libssl.so.1jest w /local/scratch/PACKAGES/local/lib. Nie jest jasne, czy --with-sslopcja powinna wskazywać tam, czy też do katalogu, w którym instalacja openssl umieściła plik openssl.cnf. Wybrałem to drugie. Ale jeśli miałby to być pierwszy, program powinien zakończyć się niepowodzeniem z błędem polegającym na tym, że nie mógł znaleźć biblioteki.

tedtoal
źródło
Sam tekst linku jest poprawny. curl nie może pobrać przy użyciu protokołu https i nie wiem dlaczego.
tedtoal
0

Określenie protokołu w adresie URL może rozwiązać problem.

Miałem podobny problem (podczas korzystania z klienta php curl):

Przekazywałem domenę.com zamiast sftp: //domain.com, co prowadzi do tego mylącego błędu:

Protokół „http” nie jest obsługiwany lub wyłączony w libcurl, zajęło 0 sekund.

ntt
źródło