当我使用请求模块检查页面是否可用时。例如:
>>> import requests
>>> url = "http://www.motie.com/book/29675"
>>> res = requests.head(url)
>>> print res.status_code
404
>>> res = requests.get(url)
>>> print res.status_code
200
Run Code Online (Sandbox Code Playgroud)
我分别得到了 HEAD 和 GET 的 status_code 404 和 200。我不知道为什么。此外,我怎么能找出原因。非常感谢。
是否应非2XX状态代码响应还包括CORS特定的头文件,例如Access-Control-Allow-Origin,Access-Control-Allow-Methods和Access-Control-Max-Age?这对客户还有意义吗?
例如:
? api git:(master) ? curl -i http://127.0.0.1:9000/dfas
HTTP/1.1 404 Not Found
Connection: close
Server: Node.js v6.3.1
Cache-Control: no-cache, no-store
Access-Control-Max-Age: 300
Access-Control-Allow-Origin: *
Content-Type: application/json
Content-Length: 60
Date: Thu, 11 Aug 2016 22:58:33 GMT
{"code":"ResourceNotFound","message":"/dfas does not exist"}
Run Code Online (Sandbox Code Playgroud) 我有一个 go 服务器正在读取并返回捆绑到 tar 中的大型数据文件。我已经测试过这可以工作并将 tar 分成几部分,并且当所有数据加载时,一切都很好。
问题是,可能会出现意外错误,导致下载中断。我当前编写了一个 HTTP 错误代码和一条错误消息,但错误消息只是放在流/文件的末尾。有没有好的方法来传达导出中途失败的情况?是否可以使用 HTTP 状态代码并提供错误消息来做到这一点?
我正在使用以下curl命令:
curl --insecure https://127.0.0.1/api/export/030e28f3-4ab6-446a-852e-fda0a497ffe2 -o "test.tar"
Run Code Online (Sandbox Code Playgroud)
我是否也必须更改curl命令来检测错误?
假设我们有一家在线商店,并收到更新某些订单的有效请求。
请求本身是有效的,但是假设订单有过期时间,并且已经过期,因此该请求实际上无法处理。
我怀疑这是否是一种验证错误。因为,正如我上面所说,请求本身是有效的;并且请求发送者可能不知道订单已经过期。
在这种情况下,REST API 服务返回的适当 HTTP 状态代码是什么?
警告:由于产品的一般要求,应该是一些4XX错误代码!
UPD:更多信息:这个假定的“订单”仍然存在,甚至已经过期。可以取回它,但不能再操作它。这就是代码404(例如)不合适的原因。
Guzzle / Http的新手。
我有一个API rest url登录名,如果未授权,则使用401代码回答;如果缺少值,则使用400回答。
我将获得http状态代码以检查是否存在某些问题,但不能仅包含代码(整数或字符串)。
这是我的代码,我确实在这里使用了说明(http://docs.guzzlephp.org/en/stable/quickstart.html#exceptions)
namespace controllers;
use GuzzleHttp\Psr7;
use GuzzleHttp\Exception\ClientException;
$client = new \GuzzleHttp\Client();
$url = $this->getBaseDomain().'/api/v1/login';
try {
$res = $client->request('POST', $url, [
'form_params' => [
'username' => 'abc',
'password' => '123'
]
]);
} catch (ClientException $e) {
//echo Psr7\str($e->getRequest());
echo Psr7\str($e->getResponse());
}
Run Code Online (Sandbox Code Playgroud) 我试图强制ValidationError返回与 400 不同的状态代码。这就是我所做的:
class MyValidationError(ValidationError):
status_code = HTTP_403_FORBIDDEN
Run Code Online (Sandbox Code Playgroud)
然后在序列化程序中:
def validate_field(self, value):
raise MyValidationError
Run Code Online (Sandbox Code Playgroud)
为什么我在这里得到 400 而不是 403?有趣的是,如果我使用PermissionDenied自定义状态代码(我尝试过 204)而不是ValidationError,它会按预期工作。
我需要返回一个带有描述的 HttpStatusCodeResult 对象,其中包含特殊(变音符号)字符。我不知道如何设置正确的编码。
\n\nreturn new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Za\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 g\xc4\x99si\xc4\x85 ja\xc5\xba\xc5\x84.");\nRun Code Online (Sandbox Code Playgroud)\n\n应该返回:
\n\n\n\n\nZa\xc5\xbc\xc3\xb3\xc5\x82\xc4\x87 g\xc4\x99si\xc4\x85 ja\xc5\xba\xc5\x84。
\n
但我得到:
\n\n\n\n\nZa\xc2\xbf\xc3\xb3\xc2\xb3\xc3\xa6 g\xc3\xaasi\xc2\xb9 ja\xc3\xb1。
\n
我尝试过Response.Charset = System.Text.Encoding.UTF8.WebName;等等,但仍然一无所获。
我最近加入了一个新项目。在这个项目中,服务中的所有 API 总是返回状态代码 200。即使响应应该是 400 或 404,API 也会返回状态代码 200。
我问了 API 不返回其他响应代码的原因,程序员告诉我他们不使用响应代码。他们将信息放入体内。
例如,缺少一些必填字段,它们返回响应状态代码 200,但正文返回这样
{"result" : "fail"}
Run Code Online (Sandbox Code Playgroud)
如果未经授权的用户尝试访问,状态码为 200,则正文返回如下
{"result" : "unautherized"}
Run Code Online (Sandbox Code Playgroud)
我之前所做的非常不同,我总是按案例指定状态代码并尝试返回合适的状态代码和消息。我认为这是 HTTP 协议的一部分。但是,他们告诉我,像 400、404、300 这样的指定状态代码是 RESTful API 的一部分,并且始终返回 200 是正确的状态代码,因为服务器响应并且它处于活动状态。APIs,除了500,总是要返回200。因为当服务器挂掉时,它不能返回任何东西。
所以这些是问题。
例如,我需要找到地址为api/user/1 的User 资源。在本例中,我正在寻找 ID 为 1 的确切资源,如果资源不存在,则应返回 404。
但是,如果我想找到确切的最新用户资源但它不存在怎么办?例如,使用地址api/latest-user。现在应该返回 404 还是返回空结果的 200?
让我困惑的是,在这两种情况下,我都在寻找某个资源,如果在第一种情况下是通过 ID 完成的,那么在第二种情况下是按顺序完成的。
如何让客户更容易理解并且不被误解?什么对客户来说更容易理解?
http ×4
rest ×3
api ×1
asp.net-mvc ×1
conventions ×1
cors ×1
curl ×1
get ×1
guzzle ×1
guzzle6 ×1
head ×1
httpresponse ×1
python ×1
request ×1
streaming ×1