2016-02-29 12 views
7

मैं पाइथन में अनुरोधों को पुनः प्रयास करने की कोशिश कर रहा हूं।
यह .get() अनुरोधों के साथ आकर्षण की तरह काम करता है, लेकिन स्थिति कोड के बावजूद .post() अनुरोध कभी भी पुनः प्रयास नहीं करता है। मैं इसे .post() अनुरोधों के साथ उपयोग करना चाहता हूं।पुन: प्रयास करने के लिए python .post() अनुरोध कैसे करें?

मेरे कोड:

from requests.packages.urllib3.util import Retry 
from requests.adapters import HTTPAdapter 
from requests import Session, exceptions 

s = Session() 
s.mount('http://', HTTPAdapter(max_retries=Retry(total=2, backoff_factor=1, status_forcelist=[ 500, 502, 503, 504, 521]))) 
r = s.get('http://httpstat.us/500') 
r2 = s.post('http://httpstat.us/500') 

तो, .get() अनुरोध पुन: प्रयास करते हैं और .post() वाले नहीं है।

क्या गलत है?

+1

ऐसा कि आप उम्मीद कर काम करने के लिए माना जाता है? 'प्राप्त करें' अनुरोध डेटा को नुकसान नहीं पहुंचाएंगे, लेकिन एकाधिक 'POST' हो सकता है। मैंने एपीआई दस्तावेज अनुरोधों के माध्यम से नहीं पढ़ा है, लेकिन यह डिज़ाइन द्वारा उचित लगता है। –

उत्तर

11

urllib3 POST डिफ़ॉल्ट रूप से एक पुनर्प्राप्त विधि के रूप में अनुमति नहीं है (क्योंकि यह एकाधिक प्रविष्टियों का कारण बन सकता है)। आप इसे हालांकि मजबूर कर सकते हैं:

Retry(total=3, method_whitelist=frozenset(['GET', 'POST'])) 

देखें http://urllib3.readthedocs.org/en/latest/helpers.html#urllib3.util.retry.Retry

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