1
멀티 컬링 요청을 수행 할 때 빈 응답 외에는 아무것도 얻을 수 없습니다. 예외가 발생되지 않지만 응답 값 (아래 코드에서 주석)에 내용pycurl 멀티 컬 요청에서 응답 본문을 얻으려면 어떻게해야합니까?
여기 내 코드의 단순화 된 버전의이 없다 : 나는 컬을 사용하지 않고 동일한 옵션 단일 요청을 한
from StringIO import StringIO
import pycurl
class CurlStream(object):
curl_count = 0
curl_storage = []
def __init__(self):
self.curl_multi = pycurl.CurlMulti()
def add_request(self, request, post_fields=None):
self.curl_count += 1
curl = self._create_curl(request, post_fields)
self.curl_multi.add_handle(curl)
def perform(self):
while self.curl_count:
while True:
response, self.curl_count = self.curl_multi.perform()
if response != pycurl.E_CALL_MULTI_PERFORM:
break
self.curl_multi.select(1.0)
def read_all(self):
for response in self.curl_storage:
print response.getvalue() # this does nothing --prints blank lines
def close(self):
self.curl_multi.close()
def _create_curl(self, request, post_fields):
curl = pycurl.Curl()
output = StringIO()
self.curl_storage.append(output)
curl.setopt(curl.URL, request)
curl.setopt(curl.WRITEFUNCTION, output.write)
curl.setopt(curl.TIMEOUT, 20)
return curl
def main():
curl_stream = CurlStream()
curl_stream.add_request('http://www.google.com')
curl_stream.add_request('http://www.example.com')
curl_stream.perform()
curl_stream.read_all()
curl_stream.close()
if __name__ == '__main__':
main()
을 멀티와 그것이 작동합니다.
def _create_curl(self, request, post_fields):
curl = pycurl.Curl()
curl.setopt(curl.URL, request)
curl.setopt(curl.WRITEFUNCTION, self.write_out)
curl.setopt(curl.TIMEOUT, 20)
# Below is the important bit, I am now adding each curl object to a list
self.curl_storage.append(curl)
return curl
def write_out(self, data):
print data
return len(data)
multicurl 객체에 컬 오브젝트를 추가 할 때 문제가 있었다, 나는하지 않았다 :