我试图了解当我使用“请求”模块发出POST请求时我到底得到了什么 - 它总是JSON吗?似乎我得到的每个响应似乎都是JSON,但我不确定。
t()
是我的回应对象,当我这样做时:
r
似乎总是返回print r.apparent_encoding
当我尝试ascii
时:
type()
我将>>>print type(r)
<class 'requests.models.Response'
的输出粘贴到JSON验证器中,并且报告没有错误。那么我应该假设Requests在这里提供我的JSON对象吗?
答案 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)。我并不是说它很好,只是它很常见。