Tôi đang viết một ứng dụng Python truy vấn các API truyền thông xã hội qua cURL. Hầu hết các máy chủ khác nhau tôi truy vấn (Google+, Reddit, Twitter, Facebook, những người khác) có than phiền cURL:Tại sao cURL trả lại "nội dung bổ sung không ổn"?
thứ bổ sung không được tốt transfer.c: 1037: 0 0
Điều không bình thường là khi ứng dụng lần đầu tiên bắt đầu, phản hồi của từng dịch vụ sẽ ném dòng này một hoặc hai lần. Sau một vài phút, dòng sẽ xuất hiện vài lần. Rõ ràng cURL đang xác định một cái gì đó mà nó không thích. Sau khoảng nửa giờ, các máy chủ bắt đầu hết thời gian và dòng này được lặp lại nhiều chục lần, vì vậy nó đang hiển thị một vấn đề thực sự.
Tôi có thể chẩn đoán điều này bằng cách nào? Tôi đã thử sử dụng Wireshark để nắm bắt yêu cầu và tiêu đề phản hồi để tìm kiếm các dị thường có thể khiến cURL phàn nàn, nhưng đối với tất cả sự phức tạp của Wireshark thì dường như không có cách nào để tách biệt và chỉ hiển thị tiêu đề.
Dưới đây là phần có liên quan của mã:
output = cStringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0')
c.setopt(c.WRITEFUNCTION, output.write)
c.setopt(c.CONNECTTIMEOUT, 10)
c.setopt(c.TIMEOUT, 15)
c.setopt(c.FAILONERROR, True)
c.setopt(c.NOSIGNAL, 1)
try:
c.perform()
toReturn = output.getvalue()
output.close()
return toReturn
except pycurl.error, error:
errno, errstr = error
print 'The following cURL error occurred: ', errstr
Bạn có chắc đây là điều họ đang thực sự quay lại trong tiêu đề, không, nói, một cảnh báo rằng cURL chỉ in tới 'stderr' hoặc' syslog' hoặc bất cứ điều gì ở giữa bạn ghi tiêu đề? (Đặc biệt kể từ khi transfer.c chính là tập tin mà tôi mong đợi để xem curl logging cái gì đó như thế này ...) Bạn có thể cần phải cho chúng tôi thấy mã thực sự bạn đang sử dụng và cho chúng tôi biết các phiên bản của libcurl và bất kỳ Python nào bao bọc bạn ' tái sử dụng. – abarnert
Cảm ơn abarnert. Một dòng bắt đầu bằng '*' chứ không phải '<' Tôi cũng nghĩ rằng chúng không phải là một phần của chính phần đầu. Tôi đã cập nhật câu hỏi. – dotancohen
Tôi nghĩ rằng bạn đã rõ ràng về điều này, và chỉ không cập nhật toàn bộ câu hỏi, nhưng chỉ trong trường hợp: lý do bạn không thể cô lập thông điệp này trong Wireshark là nó không bao giờ đi qua dây; nó chỉ được in ra cục bộ. – abarnert