- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 httpie玩我用 django 1.7 和 django rest framework 2.4 编写的 api。今天我试图删除一个对象:
$ http DELETE :8000/api/items/8/ --verbose
DELETE /api/items/8/ HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate, compress
Content-Length: 0
Host: 127.0.0.1:8000
User-Agent: HTTPie/0.8.0
HTTP/1.0 204 NO CONTENT
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
Content-Language: cs
Content-Length: 0
Date: Wed, 07 Jan 2015 21:47:06 GMT
Server: WSGIServer/0.1 Python/2.7.6
Vary: Accept, Accept-Language, Cookie
虽然需要 CSRF token ,但还是成功了。当我尝试使用以下代码从 Chrome 中删除对象时:
$.ajax({
type: "DELETE",
url: "http://127.0.0.1:8000/api/items/6/"
});
我收到以下请求:
DELETE /api/items/6/ HTTP/1.1
Host: 127.0.0.1:8000
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Accept: */*
Origin: http://127.0.0.1:8000
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
DNT: 1
Referer: http://127.0.0.1:8000/inventory
Accept-Encoding: gzip, deflate, sdch
Accept-Language: cs,en-US;q=0.8,en;q=0.6,es;q=0.4,pt;q=0.2,sk;q=0.2
Cookie: cc_csrf=bd9fbbc8f75cffa2e1e3d2c95c2185c5; _ga=GA1.1.2038400685.1386436341; __utma=96992031.2038400685.1386436341.1417173095.1417428975.79; __utmz=96992031.1409752584.3.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __zlcmid=MpdRtV3vZuf3D9; djdt=hide; sessionid=kiihjh6m77jm8v9ol7xrryip89sny55i; csrftoken=FtnnEWPLhMh0CAGMRMH77nB0AAno93uW
响应:
HTTP/1.0 403 FORBIDDEN
Date: Wed, 07 Jan 2015 21:57:40 GMT
Server: WSGIServer/0.1 Python/2.7.6
Vary: Accept, Accept-Language, Cookie
Content-Type: application/json
Content-Language: en
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
{"detail": "CSRF Failed: CSRF token missing or incorrect."}
我的设置:
REST_FRAMEWORK = {
# Use hyperlinked styles by default.
# Only used if the `serializer_class` attribute is not set on a view.
'DEFAULT_MODEL_SERIALIZER_CLASS': 'rest_framework.serializers.HyperlinkedModelSerializer',
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
],
'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',),
'DATETIME_FORMAT': "%B %d, %Y"
}
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
所以我的问题是:使用 JS ajax 发送 DELETE 请求和使用 http 发送请求有什么区别?
最佳答案
这是因为 CSRF 检查仅在使用 SessionAuthentication
进行身份验证时执行,(即使用 django.contrib.auth
设置的 sessionid
cookie ):
If you're using
SessionAuthentication
you'll need to include valid CSRF tokens for anyPOST
,PUT
,PATCH
orDELETE
operations. (source)
我假设您对 HTTPie 发送的请求使用了另一种身份验证方法,因此 CSRF 检查不会在那里应用。
https://github.com/tomchristie/django-rest-framework/blob/master/tests/test_authentication.py
关于python - Django rest 框架使用 httpie 忽略丢失的 csrf token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27829413/
我用 HTTPie发布一个 multipart/form-data 请求(传递 -f 选项)。它包括一个 文件字段(使用 @ 选项)。对应的部分 多部分请求有一个伪头 Content-Disposit
打包起来很简单httpie转换为 Python“PYZ”(zipapp),例如使用 $ pip install --upgrade zapp $ zapp httpie.pyz httpie.__ma
除了响应之外,是否可以使用HTTPie在输出上打印请求( header 和正文)? 最佳答案 --verbose, -v Print the whole HTTP exchange (request
如何将响应 header 打印到控制台并将响应内容保存到文件中? 我试过了 http GET http://download.sysinternals.com/files/SysinternalsS
如何分辨httpie第一次连接失败重试n次? 最佳答案 我认为 httpie 没有内置此功能,但由于它只是一个命令行工具,您可以在使用 httpie 的任何 shell 中使用某种重试方法...例如,
我正在尝试使用 docopt 实现 HTTPie 的 CLI,但由于某种原因,我无法将 METHOD 作为第一个参数可选。我删除了大部分选项来隔离此问题。 此外,HTTPie 的作者获取 REQUES
试图了解如何使用自签名证书。我正在使用 vagrant ubuntu xenial box。在使用 unix.stackexchange.com 中描述的方法导入 ROOT 证书后.令我惊讶的是,cu
我希望有一天我在面对编码问题时不会感到如此绝望。 我正在尝试调用 ElasticSearch HTTP API。 PowerShell Invoke-WebRequest 对西里尔字符没有问题: {
当我输入 http GET localhost/api/data?param1=3¶m2=7 时,我得到一个指示第二个参数不存在的响应。我正在尝试测试我的 REST api,但无法弄清楚为什么
有几个 default headers that HTTPie sets 。我想知道是否有办法删除某些 header ,例如 Accept-Encoding? 我喜欢取消设置 Accept-Encod
我有一个 bash 脚本可以使用 HTTPie 调用多个 API。我想捕获响应正文和 HTTP 状态代码。 这是迄今为止我所管理的最好的: rspBody=$( http $URL --check-s
我需要从 py-scripts 发送表单到 rest 服务。我尝试使用 httpie 来做到这一点。 当我调用 run(['http', '--help']) 时,我得到了预期的结果。如果我调用 ru
我正在寻找语法来编写一个使用 HTTPie 上传文件的 PUT 操作。请你能指出我正确的语法吗?我在官方文档中找不到这样做的方法 最佳答案 要使用 httpie 实现此目的,您需要做两件事: Set
我有一个基本的 silex 应用程序,我尝试使用 HTTPie 对其进行测试.然而发帖时使用: http POST http://localhost:1337 data="hello world" d
我想知道如何通过 HTTPie 使用空 json 数据发出 POST 请求?相应的 Curl 解决方案在这里: curl -X POST -H "Content-Type: application/j
我正在尝试使用 HTTPie 解析以发送一些嵌套的 JSON 对象,但我找不到如何。很清楚如何发送 JSON 对象而不是嵌套对象,例如 { "user": { "name": "john" "age"
如何在 docker 中使用 httpid 和 jq? 我只想在 json 结果中获取 ip,例如“34.10.12.40” docker run -it --rm blacktop/httpie -
HTTPie 使用 stdin 填充请求的主体,因此很容易使用 echo '{...}' | 发送原始文本或 JSON | http POST example.com 喜欢这里:Sending nes
你好,我正在尝试测试 token 身份验证,我已经按照下面的教程使用 httpie 通过 DRF 实现了 link 以下命令: http GET 127.0.0.1:8000/api/projects
我想从 Windows shell 使用 HTTPie 发送 POST 请求 JSON 输入看起来像: { "name": "pub1", "email": "support@pub1
我是一名优秀的程序员,十分优秀!