Kıvrılma * boş yanıt aldığında bağlantı sorunu nasıl giderilir *


27

Bir web sunucusuna kıvrılma isteğinin neden işe yaramadığını sorun giderme adımlarına nasıl devam edeceğimi bilmek istiyorum. Ortamıma bağlı bir yardım aramıyorum, sadece iletişimin hangi kısmının başarısız olduğu, liman numaraları vb. Hakkında nasıl bilgi toplayacağımı bilmek istiyorum.

chad-integration:~ # curl -v 111.222.159.30
* About to connect() to 111.222.159.30 port 80 (#0)
*   Trying 111.222.159.30... connected
* Connected to 111.222.159.30 (111.222.159.30) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.19.0     OpenSSL/0.9.8h zlib/1.2.3 libidn/1.10
> Host: 111.222.159.30
> Accept: */*
> 
* Empty reply from server
* Connection #0 to host 111.222.159.30 left intact
curl: (52) Empty reply from server
* Closing connection #0

Dolayısıyla, boş bir yanıtın, curl'in sunucudan herhangi bir yanıt alamadığı anlamına geldiğini anlıyorum. Hiç sorun değil, tam olarak bunu çözmeye çalışıyorum.

Fakat burada cURL'den hangi daha spesifik bilgiyi elde edebilirim?

Başarılı bir şekilde "bağlanabildi", bu yüzden iki yönlü bir iletişim gerektirmiyor mu? Eğer öyleyse, o zaman neden cevap da gelmiyor? Not, hizmetimin etkin olduğunu ve yanıtları iade ettiğini doğruladım.

Not: Bu ağ düzeyinde biraz yeşilim, bu nedenle bazı genel yönlendirme malzemeleri sağlamaktan çekinmeyin.


1
Aynı hatayı alıyordum, ama benim durumumda belli ağ trafiğini önleyen ve engelleyen VPN yazılımıydı. Daha fazlası için buraya bakın: stackoverflow.com/a/24189367/703200
Chris Bartley

Yanıtlar:


16

Bu sorunu müşteri tarafında değil sunucu tarafında gidermeniz gerekebilir. 'Boş bir cevabı' 'cevabı olmayan' ile karıştırdığınıza inanıyorum. Aynı şeyi kastetmiyorlar. Muhtemelen hiçbir veri içermeyen bir cevap alıyorsunuz.

Bunu, curl'den geçmek yerine sadece telnet kullanarak test edebilirsiniz:

telnet 111.222.159.30 80

Bağlandıktan sonra, aşağıdakileri yapıştırın (kıvrık çıktınızdan alın):

GET / HTTP/1.1
User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.19.0     OpenSSL/0.9.8h zlib/1.2.3 libidn/1.10
Host: 111.222.159.30
Accept: */*

Yanıtı tam olarak görüldüğü gibi görmelisiniz.

Boş cevap almanızın olası bir nedeni, ad tabanlı bir sanal ana bilgisayar olan bir web sitesine girmeye çalışıyor olmanızdır. Bu durumda, sunucu yapılandırmasına bağlı olarak (vurmaya çalıştığınız site varsayılan olarak yapılandırılmış olur), siteye küçük bir çalışma olmadan IP adresine erişemezsiniz.

Bunu, müşteri tarafında, yukarıdaki 'Ana Bilgisayar' satırını değiştirerek test edebilirsiniz; www.example.com adresini ulaşmaya çalıştığınız siteyle değiştirin:

GET / HTTP/1.1
User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.19.0     OpenSSL/0.9.8h zlib/1.2.3 libidn/1.10
Host: www.example.com
Accept: */*

Sayfayı başarılı bir şekilde başka bir müşteriden alabiliyorum. Sanırım, istemcinin üzerinde olabileceği belirli ağlara özgü.
08'de

Ve boş bir yanıtla = no tepki gelince, ben o var stackoverflow.com/questions/5929971/... , ama ikinci fikrini dikkate hazırım;)
Chad'i

1
Yine de sunucu tarafında sorun gidermeye ihtiyacınız var. Sunucu veri göndermiyorsa, müşteri nedenini bilemez. Sadece anlamadığını biliyor. Boşa karşı hayır olarak, kıvrılan bir 'boş' yanıttan şikayet eden bir sunucu buldum ve kesinlikle bir yanıt aldım. * Empty reply from serverkıvrılmadan, doğrudan bağlantı tümüyle ilgili başlıkları yalnızca oluşan gövdeyle gösterdi <!-- b5 -->. Belirli bir ağda değil, başka bir yerde kıvrılma ile çalışıyorsa, o ağdaki farklılıklara bakardım. Belki kötü davranan bir vekil?
yoonix 17:13

7

Kıvırmak iyidir, ancak işler ters gittiğinde fazla geri bildirim vermez. (Söyleyebileceğiniz gibi) wget size daha fazla bilgi verebilir, ancak yoonix'in dediği gibi, Sunucu tarafı (yani web sunucusu hata günlükleri) aranacak yerdir.

wget -S -O /dev/null http://www.example.com

Ana bilgisayar adlarını da ile ayarlayabilirsiniz.

wget -s -O /dev/null --header="Host: foo.bar" http://www.example.com

2

Deneyin bu -> Bunun yerine cURL geçiyor, sen Telnet ile ulaşmaya çalıştığınız siteyi ping deneyin. Bağlantı girişiminizin verdiği yanıt tam olarak cURL'in bağlanmaya çalıştığı zaman gördüğü olacaktır (ancak yardımsız bir şekilde sizden alıkoyacaktır). Şimdi, burada ne gördüklerinize bağlı olarak, birkaç sonuçtan birini çıkarabilirsiniz:

İsme dayalı sanal bir ana bilgisayar olan bir web sitesine bağlanmaya çalışıyorsunuz, yani IP adresiyle erişilemiyor. Ana bilgisayar adında bir şeyler ters gitti - bir şeyi yanlış yazmış olabilirsiniz. Parametreler için POST yerine GET kullanmanın size daha somut bir cevap vereceğini unutmayın.

Sorun 100 devam eden başlığa da bağlı olabilir. Curl_getinfo ($ ch, CURLINFO_HTTP_CODE) çalıştırmayı deneyin ve sonucu kontrol edin.


1
Not (bu aynı cevabı farklı bir cURL sorgusunda yayınladığınızı gördüğümden beri): bu sorular, başvurduğunuz PHP sarmalayıcı uygulamasına değil, cURL, CLI ikilisi hakkındadır. Başka bir deyişle, getinfoCLI cURL için bayrak veya özellik diye bir şey yoktur . @see curl.haxx.se
ken

0

Bazı durumlarda Windows'un WSL'si altında. Bash içinde kıvrılma çalıştırmak aynı hatayı oluşturur ve bunun nedeni Kasperksy'nin HTTP / s'ye bağlanmasını engellemesidir.

Bu hata burada bildirildi .

Hızlı bir çözüm, Kaspersky'nin sunucuda erişmeye çalıştığınız bağlantı noktasındaki korumasını devre dışı bırakmaktır (örnek olarak tcp 80).

Bu işlem Kaspersky - Ayarlar - Ağ Ayarları - "Yalnızca seçilen portları izle" seçeneğini işaretleyin - Portları seçin - portta çift bağlantı (80) ve etkin değil seçeneğini seçin.

görüntü tanımını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.