Curl Error 52 การตอบกลับว่างเปล่าจากเซิร์ฟเวอร์


98

ฉันมีการตั้งค่างาน cron บนเซิร์ฟเวอร์หนึ่งเพื่อเรียกใช้สคริปต์สำรองใน PHP ที่โฮสต์บนเซิร์ฟเวอร์อื่น คำสั่งที่ฉันใช้อยู่มีรูปแบบดังนี้:

curl -sS http://www.example.com/backup.php

เมื่อเร็ว ๆ นี้ฉันได้รับข้อผิดพลาดนี้เมื่อ Cron ทำงาน

curl: (52) Empty reply from server

ฉันไม่รู้ว่านี่หมายถึงอะไร ถ้าฉันไปที่ลิงค์โดยตรงในเบราว์เซอร์สคริปต์จะทำงานได้ดีและฉันได้รับไฟล์ zip สำรองของฉัน

ใครสามารถให้ข้อมูลเกี่ยวกับเรื่องนี้ได้หรือไม่?


สิ่งนี้ไม่เกี่ยวข้องกับ PHP เลยเนื่องจาก curl ไม่สนใจว่าตัวประมวลผลไฟล์เอาต์พุตคืออะไร
Kevin Peno

1
สคริปต์สำรองของคุณอาจทำงานนานจนทำให้curlหมดเวลาหรือไม่ คุณได้ลองเพิ่มค่าเริ่มต้น curl รอที่จะเชื่อมต่อ--connect-timeout <seconds>และสำหรับการดำเนินการทั้งหมด--max-time <seconds>หรือไม่?
Yzmir Ramirez

รหัสข้อผิดพลาดการหมดเวลา curl ของ @YzmirRamirez คือ 28 Src: ec.haxx.se/usingcurl-timeouts.html
Luckylooke

ด้วย Docker + Uvicorn (FastAPI) ช่วยให้ฉันตั้งค่า
--host

คำตอบ:


73

สิ่งนี้สามารถเกิดขึ้นได้หาก curl ถูกขอให้ทำ HTTP ธรรมดาบนเซิร์ฟเวอร์ที่ทำ HTTPS

ตัวอย่าง:

$ curl http://google.com:443
curl: (52) Empty reply from server

7
นี่เป็นสถานการณ์ในกรณีของฉัน curl localhost:8443ให้ข้อผิดพลาดในการตอบกลับว่างเปล่า curl -k https://localhost:8443แสดงหน้าอย่างถูกต้อง
lowly_junior_sysadmin

1
ฉันเพิ่งสะดุดกับเรื่องนี้และฉันพลาดสิ่งที่ขาดหายไปอย่างสิ้นเชิง ฉันสงสัยว่าทำไมไม่มีข้อผิดพลาดที่ชัดเจนกว่านี้ (แม้ว่าการเชื่อมต่อถูกปฏิเสธ: มันจะสมเหตุสมผลกว่า)
ShinTakezou

45

Curl แสดงข้อผิดพลาดนี้เมื่อไม่มีการตอบกลับจากเซิร์ฟเวอร์เนื่องจากเป็นข้อผิดพลาดที่ HTTP ไม่ตอบสนองต่อคำขอ

ฉันสงสัยว่าปัญหาที่คุณพบคือมีโครงสร้างพื้นฐานเครือข่ายบางส่วนเช่นไฟร์วอลล์หรือพร็อกซีระหว่างคุณกับโฮสต์ที่เป็นปัญหา ดังนั้นการดำเนินการนี้จะทำให้คุณต้องหารือเกี่ยวกับปัญหากับผู้ที่รับผิดชอบฮาร์ดแวร์นั้น


19
นี่อาจเป็นแนวทางที่ไม่ถูกต้องในการแก้ไขปัญหา การตอบกลับที่ว่างเปล่าหมายความว่าสามารถเชื่อมต่อกับ IP / พอร์ตได้ แต่เซิร์ฟเวอร์ไม่ส่งคืนข้อความตอบกลับ น่าจะเป็นปัญหาในตัวบริการเอง
Robert Christian

4
ก็ไม่เชิง เมื่อสิ่งนี้เกิดขึ้นกับฉันมันเป็นเพราะพร็อกซีการพิสูจน์ตัวตนของฉันไม่ได้เชื่อมต่อกับโฮสต์ระยะไกล ดังนั้นในความเป็นจริงไม่มีปัญหาในการให้บริการ
Steve Knight

ในกรณีของฉันฉันมีพร็อกซีซึ่งถูกปิดใช้งานสำหรับอินเทอร์เฟซแบบวนกลับที่เซิร์ฟเวอร์กำลังทำงานอยู่
rbaleksandar

ในกรณีของฉันคือเซิร์ฟเวอร์แคชเว็บ NGINX ที่ไม่มีพื้นที่ว่างในฮาร์ดไดรฟ์เหลืออยู่
Alien Life Form

8

ในกรณีของฉันมันเป็นการเปลี่ยนเส้นทางเซิร์ฟเวอร์ curl -Lแก้ปัญหาของฉัน


8

อาจเกิดขึ้นได้เมื่อเซิร์ฟเวอร์ไม่ตอบสนองเนื่องจากการใช้ CPU หรือหน่วยความจำ 100%

ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามเข้าถึง sonarqube API และเซิร์ฟเวอร์ไม่ตอบสนองเนื่องจากการใช้หน่วยความจำเต็ม


7

อีกสาเหตุหนึ่งที่ทำให้การตอบกลับว่างเปล่าคือการหมดเวลา ตรวจสอบฮ็อพทั้งหมดที่งาน cron กำลังทำงานจากไปยังเซิร์ฟเวอร์ PHP / เป้าหมายของคุณ อาจมีอุปกรณ์ / เซิร์ฟเวอร์ / nginx / LB / พร็อกซีที่ไหนสักแห่งตามบรรทัดที่ยุติคำขอเร็วกว่าที่คุณคาดไว้ส่งผลให้การตอบกลับว่างเปล่า


5

ในกรณีของการเชื่อมต่อ SSL อาจเกิดจากปัญหาในเซิร์ฟเวอร์ nginx เวอร์ชันเก่าที่เกิดข้อผิดพลาดระหว่างการร้องขอ curl และ Safari จุดบกพร่องนี้ได้รับการแก้ไขในเวอร์ชัน 1.10 ของ nginx แต่ยังมี nginx เวอร์ชันเก่า ๆ อยู่บนอินเทอร์เน็ต

สำหรับผู้ดูแลระบบ nginx: การเพิ่มssl_session_cache shared:SSL:1m;ลงในhttpบล็อกควรแก้ปัญหาได้

ฉันทราบว่า OP กำลังขอกรณีที่ไม่ใช่ SSL แต่เนื่องจากนี่เป็นหน้าบนสุดใน goole สำหรับปัญหา "การตอบกลับที่ว่างเปล่าจากเซิร์ฟเวอร์" ฉันจึงปล่อยคำตอบ SSL ไว้ที่นี่เนื่องจากฉันเป็นหนึ่งในหลาย ๆ คนที่ทะเลาะกัน กับกำแพงที่มีปัญหานี้


3

ในกรณีของฉันนี่เกิดจากปัญหา PHP APC อันดับแรกที่ต้องดูคือบันทึกข้อผิดพลาดของ Apache (หากคุณใช้ Apache)

หวังว่านี่จะช่วยใครสักคน


ช่วยอธิบายอีกนิดได้ไหม เกิดจาก APC ได้อย่างไร? ฉันไม่ได้เรียกใช้สิ่งนี้ใน PHP ฉันแค่ใช้บรรทัดคำสั่ง
Nino Škopac

เมื่อนานมาแล้วฉันจำไม่ได้ว่าสาเหตุที่ APC เป็นสาเหตุของปัญหานี้ ขอโทษที่ฉันช่วยไม่ได้
Andrew McCombe

2

ข้อผิดพลาดนี้อาจเกิดขึ้นได้หากเซิร์ฟเวอร์กำลังประมวลผลข้อมูล มักจะเกิดขึ้นกับฉันเมื่อฉันโพสต์ไฟล์บางไฟล์ไปยังเว็บไซต์ REST API ที่มีหลายรายการและใช้เวลานานในการสร้างและส่งคืนระเบียน


1

คุณสามารถลอง curl -sS " http://www.example.com/backup.php " นี้โดยใส่ URL ของคุณเป็น "" ที่เหมาะกับฉันฉันไม่รู้เหตุผลที่แน่นอน แต่ฉันคิดว่าการใส่ url ลงใน " "ดำเนินการตามคำขอไปยังเซิร์ฟเวอร์หรือเพียงแค่ดำเนินการตามคำขอส่วนหัว


1

ฉันเคยมีปัญหานี้มาก่อน คิดว่าฉันมีแอปพลิเคชั่นอื่นที่ใช้พอร์ตเดียวกัน (3000)

วิธีง่ายๆในการค้นหาสิ่งนี้:

ในเทอร์มินัลให้พิมพ์netstat -a -p TCP -n | grep 3000(แทนที่พอร์ตที่คุณใช้สำหรับ '3000') หากมีการฟังมากกว่าหนึ่งรายการแสดงว่ามีสิ่งอื่นครอบครองพอร์ตนั้นอยู่แล้ว คุณควรหยุดกระบวนการนั้นหรือเปลี่ยนพอร์ตสำหรับกระบวนการใหม่ของคุณ


2
นี่เป็นกรณีเฉพาะที่คุณกล่าวถึง โดยทั่วไปแล้วทำไม curl จึงตอบกลับคุณ ปรากฎว่าปัญหานี้ต้องได้รับการจัดการที่ฝั่งเซิร์ฟเวอร์ไม่ใช่ฝั่งไคลเอ็นต์ นี่คือที่ที่ฉันเข้าใจ
Aashish Chaubey

1

ในกรณีของฉัน (curl 7.47.0) เป็นเพราะฉันตั้งค่าส่วนหัวของcontent-lengthคำสั่ง curl ด้วยตนเองด้วยค่าที่บุรุษไปรษณีย์คำนวณ (ฉันใช้บุรุษไปรษณีย์เพื่อสร้างพารามิเตอร์คำสั่ง curl และคัดลอกไปยังเชลล์) หลังจากที่ฉันลบส่วนหัวมันcontent-lengthจะทำงานได้ตามปกติ


0

ลองใช้สิ่งนี้ -> แทนที่จะใช้ cURL ให้ลอง ping ไซต์ที่คุณพยายามเข้าถึงด้วย Telnet การตอบสนองที่ความพยายามในการเชื่อมต่อของคุณส่งกลับจะเป็นสิ่งที่ cURL เห็นเมื่อพยายามเชื่อมต่อ (แต่สิ่งที่ทำให้คุณสับสนอย่างไม่เป็นประโยชน์) ตอนนี้ขึ้นอยู่กับสิ่งที่คุณเห็นที่นี่คุณอาจได้ข้อสรุปอย่างใดอย่างหนึ่ง:

คุณกำลังพยายามเชื่อมต่อกับเว็บไซต์ที่เป็นโฮสต์เสมือนตามชื่อซึ่งหมายความว่าไม่สามารถเข้าถึงผ่านที่อยู่ IP ได้ เกิดข้อผิดพลาดกับชื่อโฮสต์คุณอาจพิมพ์ผิดบางอย่าง โปรดทราบว่าการใช้ GET แทน POST สำหรับพารามิเตอร์จะให้คำตอบที่เป็นรูปธรรมมากขึ้น

ปัญหานี้อาจเชื่อมโยงกับส่วนหัว 100 ต่อ ลองวิ่งcurl_getinfo($ch, CURLINFO_HTTP_CODE)และตรวจสอบผลลัพธ์


จุดที่น่าสนใจ. จริง ๆ แล้วฉันสามารถรับ HTML เป็นคำตอบด้วยtelnet hostnameและGET <url>
Nino Škopac


-1

ในกรณีของฉันฉันใช้ uwsgi เพิ่มคุณสมบัติ http-timeout เป็นเวลานานกว่า 60 วินาทีแล้ว แต่มันไม่ทำงานเนื่องจากพื้นที่เพิ่มเติมและไฟล์ config ไม่ได้รับการโหลดอย่างถูกต้อง


-2

เกิดขึ้นเมื่อคุณพยายามเข้าถึงเว็บไซต์ที่ปลอดภัยเช่น Https

ฉันหวังว่าคุณจะพลาด

ลองเปลี่ยน URL เป็น curl -sS -u "ชื่อผู้ใช้: รหัสผ่าน" https://www.example.com/backup.php


3
มากไม่ และ btw การรับรองความถูกต้องง่ายๆ "username: password" ต้องทำอย่างไรกับ https?
Nino Škopac

ส่วนรับรองความถูกต้องของคำตอบทำให้ดูเหมือนว่าคุณไม่รู้ว่าทำไมการเพิ่มคำตอบนั้นเป็นเรื่องแปลก
กิดกาดด้า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.