gpt4 book ai didi

krl - http :get adding "&" before getting

转载 作者:行者123 更新时间:2023-12-04 06:33:55 26 4
gpt4 key购买 nike

不知道发生了什么。当我执行以下代码时......它运行良好......但它产生了错误。如果我将以下内容粘贴到我的浏览器地址栏中并点击它,我会得到一个 URL。如果我通过 KRL http:get 输入相同的 url,我会得到一个完全不同的 URL。

“http://tinyurl.com/api-create.php?url=http://insideaf.blogspot.com”

我自己在浏览器中得到:http://tinyurl.com/6j7qucx

当通过 http:get 运行时,我得到:http://tinyurl.com/4fdtnoo

不同之处在于第二个,即通过 KRL 运行的 http:get 命中请求的站点,但它在请求的末尾附加了一个“/&”。无论我在哪个网站上,它都会这样做。如果我在 www.google.com 上,它会返回一个 tinyurl,结果是 www.google.com/& 并给我一个错误。我传递给 http:get 方法的所有站点都以 & 在结尾处返回。这是我的代码,以便您可以看到我不是自己不小心添加的。

myLocation = event:param("location");

url2tiny = "http://tinyurl.com/api-create.php?url="+myLocation;

tinyresponse = http:get(url2tiny);

tinyurl = tinyurl.pick("$.content");

如果我 console.log url2tiny,它看起来完全像它应该的那样。看来,当我将 url2tiny 传递给 http:get 时,它会在从 tinyurl api 请求它之前自动将 & 添加到它的末尾。

有关此问题的解决方法的任何想法?它似乎是 http:get 方法中的一个错误。如果我错了(我希望我错了),请指出正确的方向。

最佳答案

在这两种情况下,您的格式都略有偏差。 http:get 可以在 pre 块中用作表达式,但语法与您在 action 块中使用的方式不同。

实际上,您可以通过多种不同的方式提出此请求。传统方式是通过数据源

资料来源

  global {
datasource tiny_url_request <- "http://tinyurl.com/api-create.php";
}

rule using_datasource is active {
select when pageview ".*" setting ()
pre {
myLocation = page:env("caller");
thisTiny = datasource:tiny_url_request("?url="+myLocation);
}
{
notify("URL", myLocation) with sticky = true;
notify("datasource: ", thisTiny) with sticky = true;
}
}

另一种方式是您尝试的方式,它是通过 http:get 作为 pre 块中的表达式。作为函数调用,http:get 有 2 个必需参数和两个可选参数:

http:get(url, params, headers, response_headers );



您的第一次尝试不包括参数。
tinyresponse = http:get(url2tiny)

第二次尝试将参数放在错误的参数位置。
http:get("tinyurl.com/api-create.php";,{"url":myurl})

http:get(预块)
  rule get_in_pre is active {
select when pageview ".*" setting ()
pre {
myLocation = page:env("caller");
tinyurl = http:get("http://tinyurl.com/api-create.php", {"url":myLocation});
turl = tinyurl.pick("$.content");
}
{
notify("http:get as expression",turl) with sticky = true;
}

}

第三种方法是使用 http:get 作为 Action 并自动引发事件

http:get( Action )
  rule using_action is active {
select when pageview ".*" setting ()
pre {
myLocation = page:env("caller");
}
http:get("http://tinyurl.com/api-create.php") setting (resp)
with
params = {"url" : myLocation} and
autoraise = "turl_event";
}

rule get_event is active {
select when http get label "turl_event" status_code "(\d+)" setting (code)
pre {
a = event:param("content");
}
notify("Autoraised from action",a) with sticky = true;
}

这是针对此页面执行的这些规则的示例
enter image description here

关于krl - http :get adding "&" before getting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5069651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com