2013-10-26 4 views
7

मैं eyay sdk को python3 पर पोर्ट कर रहा हूं और मैंने निम्न समस्या पर ठोकर खाई है।पायकुरल और io.StringIO - pycurl.error: (23, 'असफल लेखन निकाय)

मैं कुछ HTTP अनुरोध भेजने के लिए pycurl का उपयोग कर रहा हूं। यहाँ कैसे मैं इसे कॉन्फ़िगर है:

self._curl = pycurl.Curl() 
    self._curl.setopt(pycurl.FOLLOWLOCATION, 1) 
    self._curl.setopt(pycurl.URL, str(request_url)) 
    self._curl.setopt(pycurl.SSL_VERIFYPEER, 0) 

    self._response_header = io.StringIO() 
    self._response_body = io.StringIO() 

    self._curl.setopt(pycurl.CONNECTTIMEOUT, self.timeout) 
    self._curl.setopt(pycurl.TIMEOUT, self.timeout) 

    self._curl.setopt(pycurl.HEADERFUNCTION, self._response_header.write) 
    self._curl.setopt(pycurl.WRITEFUNCTION, self._response_body.write) 

जब मैं self._curl.perform() मैं निम्नलिखित त्रुटि मिलती फोन:

pycurl.error: (23, 'Failed writing body (1457 != 1460)') 

जहां तक ​​मुझे पता है इसका मतलब है एक मुद्दा है कि वहाँ लेखन समारोह के साथ, लेकिन मैं यह नहीं समझ सकता कि यह वास्तव में क्या है। स्ट्रिंगियो मॉड्यूल से io में माइग्रेशन से संबंधित हो सकता है, लेकिन मुझे यकीन नहीं है।

युपीडी: मैं निम्नलिखित की कोशिश की है:

def body(buf): 
     self._response_body.write(buf) 

    def header(buf): 
     self._response_header.write(buf) 

    self._curl.setopt(pycurl.HEADERFUNCTION, header) 
    self._curl.setopt(pycurl.WRITEFUNCTION, body) 

और यह काम करता है। मैंने लैम्बडास के साथ एक ही चाल करने की कोशिश की है (उन अजीब फ़ंक्शन को परिभाषित करने के बजाय, लेकिन यह काम नहीं किया।

उत्तर

13

मुझे विश्वास है कि समस्या यह है कि pycurl अब वांछित की तरह स्ट्रिंगियो के साथ काम नहीं करता है। एक समाधान का उपयोग करना है । io.BytesIO बजाय फिर आप जानकारी बफर में लिखा प्राप्त कर सकते हैं और एक स्ट्रिंग में डिकोड

StringIO के बजाय pycurl साथ BytesIO का उपयोग करना:।

e = io.BytesIO() 
c.setopt(pycurl.WRITEFUNCTION, e.write) 
BytesIO वस्तु से

डिकोडिंग बाइट जानकारी:

htmlString = e.getvalue().decode('UTF-8') 

आप किसी भी प्रकार के डिकोडिंग का उपयोग कर सकते हैं, लेकिन यह आपको एक स्ट्रिंग ऑब्जेक्ट देना चाहिए जिसे आप पार्स कर सकते हैं।

आशा इस अजगर 3. का उपयोग कर लोगों को मदद मिलती

+0

http://pycurl.sourceforge.net/doc/unicode.html#writing-to-stringio-bytesio –

संबंधित मुद्दे