【问题标题】:Clarification on POST multipart request with python requests and urllib2使用 python 请求和 urllib2 对 POST 多部分请求进行澄清
【发布时间】:2017-03-11 02:39:13
【问题描述】:

我正在尝试在 Python 中提交多部分 POST 请求。我环顾四周,发现了 2 个变体:

我尝试了这两个并且能够成功提交请求。 以下是两者的示例代码:

  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。但是,在使用“请求”时,它不会针对 500 秒之类的响应代码抛出 HTTPError,而是我必须手动添加条件:

    Response.raise_for_status():
    

    或:

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

    这是正确的还是我遗漏了什么?

谢谢!

【问题讨论】:

  • 这是一个基于意见的问题,但 requests 是目前最常用的 Python 库之一。 raise_for_status 事情让您有机会检查 HTTP 响应并在适当时重试,这通常是。
  • @cbare。 Response.raise_for_status() 除了状态码 200 之外,它会引发错误吗?另外,你能确认 urllib2 在除 200 之外的所有场景中都会抛出 HTTPError 吗?如果是这种情况,那么我可以使用 urllib2 而不是使用“请求”并添加 Response.raise_for_status()

标签: python


【解决方案1】:

Response.raise_for_status() 引发 4xx 和 5xx 范围内的 HTTP 响应代码。 src 非常清晰易读。

您将收到成功请求的 2xx 响应,但您可能还需要考虑其他响应代码,例如重定向。

【讨论】:

  • 你知道 urllib2 是否会为 200 以外的所有内容引发 HTTP 错误吗?
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 2014-03-15
  • 2015-07-14
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多