- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 docopt 实现 HTTPie 的 CLI,但由于某种原因,我无法将 METHOD 作为第一个参数可选。我删除了大部分选项来隔离此问题。
此外,HTTPie 的作者获取 REQUEST ITEM 的方式在 docopt 文档中似乎是错误的,因此想知道实现该部分的最佳替代方案是什么。
HTTPie 的完整文档:https://github.com/jkbr/httpie
最佳答案
docopt 在尝试匹配模式时是贪婪的。所以如果你的模式是:
usage: http [METHOD] URL [ITEM...]
然后你运行 $ http google.com bla
然后 docopt 会将 google.com
匹配为 METHOD
,因为,哟,这是第一个立场论证!在这种情况下,docopt 没有任何信息来推断 METHOD
应该是什么样子。但是,如果您有以下用法:
usage: http [get|post|put|delete] URL [ITEM...]
然后它知道如果它不是get/post/put/delete
,那么它应该是一个URL
。但是,我可以看到这不是最佳选择:1. httpie 使用大写名称(它们被解释为位置参数,而不是 docopt 的命令),2. 如果有很多命令,则用法可能会变成很长的一行。
如果您不关心与 httpie 的兼容性,我会使用 (A) 小写命令,因为命令按照惯例都是小写的。另一个不兼容的设计决策是 (B) 需要 METHOD
:
usage: http METHOD URL [ITEM...]
通过这种方式,您可以使使用模式变得明确。 (C) 为了保持兼容性,我将采用以下用法:
usage: http URL [ITEM...]
http METHOD URL [ITEM...]
在这种情况下,第二个子模式将永远不会匹配(docopt 不知道有关 url 和方法的任何信息,这使得第一个模式成为第二个模式的超集),然后我将分解参数如下:
positional_arguments = [args['URL']] + args['ITEM']
然后手动解析 positional_arguments
,具体取决于第一个参数是像 url 还是像请求动词。
抱歉,docopt 不能优雅地处理这种情况,我会更多地考虑这个用例。如果您有任何建议,请创建问题:https://github.com/docopt/docopt/issues
P.S. 你是对的,REQUEST ITEM
是错误的,非常非常规且令人困惑。它应该是 REQUEST-ITEM
或 REQUEST_ITEM
或只是 ITEM
。
关于python - 在 docopt 中实现 HTTPie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14699714/
我用 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
我是一名优秀的程序员,十分优秀!