2017-03-10 134 views
0

我想在Python中提交一個多部分POST請求。我環顧四周,發現2個版本:用python請求和urllib2解釋POST多部分請求

我想他們都和我能夠成功提交申請。 下面是兩個示例代碼:

  1. ---------- --------------請求

    resp = requests.post(submiturl, files=multipart_form_data, headers=headers,timeout=5) 
    

    其中multipart_form_data包含我的文件對象以及字符串參數

  2. --------------- ------------的urllib2

    items.append(MultipartParam(name, value)) 
    fileObj = open(inputFile,'r') 
    items.append(MultipartParam('file', filename=inputFile, fileobj=fileObj)) 
    res = urllib2.urlopen(request) 
    

我的問題:

  1. 一個我應該使用哪一種?
  2. 糾正我,如果我錯了,但我已經看到,同時提交與urllib2我得到HTTPError響應代碼,如500。然而,,而使用「請求」不拋出HTTPError像500級的響應代碼,而不是我必須手動添加條件:

    Response.raise_for_status(): 
    

    或:

    resp.status_code != 200: raise Execption(...) 
    

    這是正確的還是我錯過了什麼?

謝謝!

+0

這是一個基於意見的問題,但**請求**是最常用的Python庫之一。 * raise_for_status *事物讓你有機會檢查HTTP響應,並在適當的時候重試,通常是這樣。 – cbare

+0

@cbare。 'Response.raise_for_status()'會引發狀態碼200以外的錯誤嗎?另外,你能確認urllib2會在200以外的所有場景中拋出HTTPError嗎?如果是這樣的話,那麼我可以使用urllib2,而不是使用「請求」,並添加Response.raise_for_status() – Dadu

回答

0

Response.raise_for_status()引發4xx和5xx範圍內的HTTP響應代碼。 src非常清晰可讀。

您將獲得成功請求的2xx響應,但您可能還想考慮其他響應代碼,例如重定向。

+0

你知道urllib2是否會引發除200以外的所有內容的HTTP錯誤? – Dadu