当前位置: 首页 > 知识库问答 >
问题:

终止或中止HTTP请求

燕鸿波
2023-03-14

调用我的服务的链接:

http://creative.test.spoti.io/api/getVastPlayer?add=
    {"Json":Json}&host=api0.spoti.io&domain=domain&userAgent=userAgent&mobile=true

要调用我的服务,客户机需要发送一个Json和一些params。

我想测试我得到的参数是否正确,如果不正确,我想发送一条错误消息。

我尝试了log.fatalos.exit(1),它们停止服务,而不仅仅是调用请求。panic中止调用,但它阻止我发送http.responsewriter,这是我的错误消息。

我读过一些关于恐慌、延迟、恢复的东西,但我真的不知道如何使用它们来解决这个问题。

返回工作:

mobile :=query.Get("mobile")
if mobile=="mobile" {
            str:=`{"Resultt":"","Error":"No valide Var"}`
            fmt.Fprint(w, str)      
            fmt.Println("No successfull Operation!!")
            return}  

但我只能在main函数中使用它,因为在其他函数中,它只退出func,而不退出调用方函数(请求)。

共有1个答案

谭彦
2023-03-14

终止HTTP请求的服务只不过是从serveHTTP()方法返回,例如:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // examine incoming params
    if !ok {
        str := `{"Result":"","Error":"No valide Var"}`
        fmt.Fprint(w, str)
        return
    }

    // Do normal API serving
})

panic(http.ListenAndServe(":8080", nil))

备注:

如果API服务的输入参数无效,您应该考虑返回HTTP错误代码,而不是隐含的默认200 OK。为此,可以使用http.error()函数,例如:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // examine incoming params
    if !ok {
        http.Error(w, `Invalid input params!`, http.StatusBadRequest) 
        return
    }

    // Do normal API serving
})

对于一个更复杂的示例,您将JSON数据和错误代码一起发回:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // examine incoming params
    if !ok {
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusBadRequest)
        str := `{"Result":"","Error":"No valide Var"}`
        fmt.Fprint(w, str)
        return
    }

    // Do normal API serving
})

演示如何传播“返回”的示例

如果在serveHTTP()之外检测到错误,例如在从serveHTTP()调用的函数中,则必须返回此错误状态,以便serveHTTP()能够返回。

让我们假设您有以下所需参数的自定义类型和一个负责从请求中解码它们的函数:

type params struct {
    // fields for your params 
}

func decodeParams(r *http.Request) (*params, error) {
    p := new(params)
    // decode params, if they are invalid, return an error:

    if !ok {
        return nil, errors.New("Invalid params")
    }

    // If everything goes well:
    return p, nil
}

使用这些:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    p, err := decodeParams(r)
    if err != nil {
        http.Error(w, `Invalid input params!`, http.StatusBadRequest)
        return
    }

    // Do normal API serving
})

也看这个相关的问题:戈朗,如何从另一个func返回func?

 类似资料:
  • 问题内容: 通过某些错误消息中止我的 API 服务的方式是什么? 链接致电我的服务: 要给我的服务打电话,客户需要发送一个Json和一些参数。 我想测试我获得的参数是否正确,否则,我想发送一条错误消息。 响应应为Json代码 我尝试过,他们停止了服务,而不仅仅是通话请求。中止通话,但阻止我发送这是我的错误消息。 我读了一些有关 恐慌,推迟,恢复的信息, 但我真的不知道如何使用它们来解决此问题。 作

  • 如何从HandleFunc调用多个错误返回函数? 我在这个链接中找到了类似于我需要的东西:Golang:终止或中止HTTP请求。 附注:我还读过以下博客帖子:http://blog.golang.org/error-handling-and-go 那里有一个部分叫做“简化重复性错误处理”--这很酷,但我需要简化多个重复性错误处理,我不知道怎么做。

  • 终止容器 可以使用 docker container stop 来终止一个运行中的容器。 此外,当 Docker 容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。 终止状态的容器可以用 docker container ls -a 命令看到。例如 docker container ls

  • 问题内容: 我有一个Java 8流循环,其内容如下: 满足某些条件时如何跳出循环?什么是关闭流的正确方法呢? 更新 我滥用流技术,假设它是一个循环,不是为此而设计的。这是我使用下面提供的答案最终得到的代码: 问题答案: 不是循环,也并非设计为使用终止。如果流是并行流,则lambda主体可以同时在不同的线程上执行(这不容易打破,并且很容易产生错误的结果)。 最好使用带有while循环的迭代器:

  • 本文向大家介绍jQuery实现ajax的叠加和停止(终止ajax请求),包括了jQuery实现ajax的叠加和停止(终止ajax请求)的使用技巧和注意事项,需要的朋友参考一下 jQuery实现ajax的叠加和停止的关键代码如下所示: 以上所述是小编给大家介绍的jQuery实现ajax的叠加和停止(终止ajax请求),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常

  • 本文向大家介绍什么是PowerShell中的终止和非终止错误?,包括了什么是PowerShell中的终止和非终止错误?的使用技巧和注意事项,需要的朋友参考一下 Powershell执行脚本或命令时会生成两种类型的错误。终止错误和非终止错误。 终止错误-该错误是由您创建的脚本,函数或命令生成的,并且会停止或停止脚本的执行,从而导致下一行中的命令无法执行。要处理此错误,需要适当的机制,否则将显示错误消