2017-03-10 162 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