当前位置: 首页 > 面试题库 >

确保URI有效

漆雕亮
2023-03-14
问题内容

我试图确保传递给go程序的URL有效。但是,我似乎无法解决。我以为我可以解决问题url.Parse,但这似乎并没有完成。

package main

import (
    "fmt"
    "net/url"
)

func main() {
    url, err := url.Parse("http:::/not.valid/a//a??a?b=&&c#hi")
    if err != nil {
        panic(err)
    }
    fmt.Println("It's valid!", url.String())
}

操场

有沿线的任何filter_var我可以使用吗?


问题答案:

您可以检查您的URL是否具有“方案”,“主机”和/或“路径”。

如果检查返回的URL,则可以看到无效部分已插入不透明数据部分(从某种意义上讲是有效的)。

url.URL{Scheme:"http", Opaque:"::/not.valid/a//a", Host:"", Path:"", RawQuery:"?a?b=&&c", Fragment:"hi"}

如果您解析一个URL并且没有Scheme,Host和Path,则可能会认为它无效。(尽管没有路径的主机通常可以,因为它暗示/,所以您需要检查一下)

u, err := url.Parse("http:::/not.valid/a//a??a?b=&&c#hi")
if err != nil {
    log.Fatal(err)
}

if u.Scheme == "" || u.Host == "" || u.Path == "" {
    log.Fatal("invalid URL")
}


 类似资料:
  • 问题内容: 如何强制一个表只有一行?下面是我尝试过的。该触发器可以工作,但是,触发绝对不会。对于CREATE,我想使用,但是SQLite不支持。 问题答案: 通常,要限制表中的行数,必须防止任何进一步的插入。在SQLite中,这是通过RAISE()完成的: 但是,如果限制为1,则可以简单地将主键约束为固定值:

  • 在下面的示例中,我有两个正在处理来自kafka的消息的服务实例,但我希望确保只在之后处理。 显然,通过将一个实例配置为仅从特定分区消费,可以很容易地解决这种情况,该分区将存储带有公共标识符的消息: 现在顺序得到了保证,将永远不会在之前处理。 但是,我在想这个问题是否可以用另一种方式来解决,直接在代码中而不是依赖基础设施?这看起来可能是微服务架构中的一个标准问题,但我不确定哪种方法是解决它的首选方法

  • 问题内容: 我是Elasticsearch的新手,但我非常喜欢。我唯一找不到也无法完成的事情是确保生产系统的Elasticsearch安全。我在elasticsearch之前阅读了很多有关使用nginx作为代理的信息,但是我从未使用过代理,也从未使用过代理。 这是在生产系统中确保elasticsearch的典型方法吗? 如果是这样,是否有任何教程或不错的读物可以帮助我实现此功能。我真的很想在我们的

  • 我已经安装了Visual Studio2013,当我运行我的应用程序时,我得到了下面的错误。 我不知道在哪里初始化这个对象。 怎么办? 这是给AlumCloud的

  • 在ABI的NDK toolchains文件夹中找不到前缀为的工具链 我不想升级,因为担心它可能会破坏我的应用程序,需要使用NDK来与C++一起工作。 按照以下步骤解决错误-错误:在ABI的NDK toolchains文件夹中找不到前缀为:llvm的工具链

  • 我正在使用Spring并在“mapper”字段的第一个控制器中遇到问题: 上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatisfiedPendencyException:创建名为“controller”的bean时出错:未满足的依赖项通过字段“mapper”表示;嵌套的异常是org。springframework。豆。工厂BeanCreationE