请求响应总是JSON吗?

时间:2015-07-15 07:46:49

标签: python json post python-requests httpresponse

我试图了解当我使用“请求”模块发出POST请求时我到底得到了什么 - 它总是JSON吗?似乎我得到的每个响应似乎都是JSON,但我不确定。

t()是我的回应对象,当我这样做时:

r

似乎总是返回print r.apparent_encoding

当我尝试ascii时:

type()

我将>>>print type(r) <class 'requests.models.Response' 的输出粘贴到JSON验证器中,并且报告没有错误。那么我应该假设Requests在这里提供我的JSON对象吗?

2 个答案:

答案 0 :(得分:5)

回应可以是任何事情。如果您已发布到REST端点,它通常会使用JSON进行响应。如果是这样,requests会检测到这一点并允许您通过.json()方法对其进行解码。

但是你很有可能发布到一个普通的网址,实际上假装是一个浏览器,除非服务器正在做一些非常聪明的事情,它只会响应它将提供给浏览器的标准HTML。在这种情况下,执行response.json()会引发ValueError。

答案 1 :(得分:3)

,POST请求的响应文本完全取决于Web服务。一个好的REST API将始终使用JSON进行响应,但您并不总能得到它。

实施例

PHP中的常见模式是

<?php

$successful_whatever = false;

if (isset($_POST['whatever'])) {
    # put $_POST['whatever'] in a database
    $successful_whatever = true;
}

echo $twig->render('gallery.twig',
                   array('successful_whatever' => $successful_whatever));

?>

如您所见,响应文本将是呈现模板(HTML)。我并不是说它很好,只是它很常见。