【问题标题】:Sending a custom POST https request in dispatch (+cookies, + headers)在调度中发送自定义 POST https 请求(+cookies,+ 标头)
【发布时间】:2013-10-07 04:25:10
【问题描述】:

有一些关于在 dispatch http://dispatch.databinder.net/Combined+Pages.html 中发送帖子请求的文档,但还不清楚。那里的 myRequest 和 myPost 是什么?

我想发送一个 https 的 post 请求 + 通过 headers 手动添加一些 cookie + 添加一些海关 header 如表单数据等,然后通过读取 headers 和 cookie 来读取响应。

我只知道如何准备发送post请求的url:

val url = host(myUrl + "?check=1&val1=123").secure

接下来我该怎么做?

【问题讨论】:

    标签: scala http cookies scala-dispatch


    【解决方案1】:

    Dispatch 建立在 Async Http Client 之上。因此,示例中的myRequest

     val myRequest = url("http://example.com/some/path")
    

    com.ning.http.client.RequestBuilder

    RequestBuilder 上调用POST 方法会将请求转换为POST 请求。这就是 myPost 示例中发生的情况:

    def myPost = myRequest.POST
    

    我经常发现 Dispatch 文档难以遵循。有关所有各种 Dispatch 运算符的快速概览,请参阅:Periodic Table of Dispatch Operators

    如果您询问如何构建 POST 请求并添加自定义表单参数,您可能希望像这样使用 <<(values) 运算符:

    val params = Map("param1" -> "val1", "param2" -> "val2") 
    val req = url("http://www.example.com/some/path" <<(params)
    

    同样,如果您想添加一些自定义标题,您可以使用 &lt;:&lt;(map) 运算符,如下所示:

    val headers = Map("x-custom1" -> "val1", "x-custom2" -> "val2") 
    val req = url("http://www.example.com/some/path" <<(params) <:<(headers)
    

    更新:实际上,RequestBuilder 上没有 POST 方法。对POST 的调用是Dispatch 的一部分,并在底层RequestBuilder 上调用setMethod。详情请见dispatch.MethodVerbs

    【讨论】:

    • 我认为反之亦然:<:>
    • @Alex,我很确定我做对了。但是您的评论是我不喜欢所有那些疯狂的 Dispatch 操作员的原因之一。 :-) 在某些情况下,我认为直接在RequestBuilder 上调用方法会更清晰,例如:req.addHeader("x-custom1", "val1")
    猜你喜欢
    • 2013-01-24
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多