Krl http:get添加"&&引用;在得到

Krl http:get添加"&&引用;在得到,krl,Krl,不知道发生了什么事。当我执行以下代码时。。。它运行良好。。。但它正在产生一个错误。如果我将以下内容粘贴到我的浏览器地址栏并点击它,我会得到一个URL。如果我通过krlhttp:get输入相同的url,我会得到一个完全不同的url "http://tinyurl.com/api-create.php?url=http://insideaf.blogspot.com" 我自己在浏览器中获得: 当通过http:get运行时,我得到: 不同的是,第二个,通过KRL http:get运行的,命中了请求的站

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

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

我自己在浏览器中获得:

当通过http:get运行时,我得到:

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

myLocation=事件:参数(“位置”)

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

tinyresponse=http:get(url2tiny)

tinyurl=tinyurl.pick($.content)

如果我使用console.log记录url2tiny,它看起来与应该的完全一样。当我将url2tiny传递给http:get时,它似乎会在从tinyurlapi请求它之前自动将&添加到它的末尾


有没有解决这个问题的办法?这似乎是http:get方法中的一个bug。如果我错了(我希望我错了),请给我指出正确的方向

在这两种情况下,您的格式都略有偏差。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作为操作并自动引发事件

http:get(操作)

下面是针对该页面执行的这些规则的示例

回答得真棒。我试着按照你在预告栏中所说的方式来做,但它对我的效果不如对你的效果。我会再试一次。现在,我只是用bit.ly来代替。我想我将制作一个供其他人使用的bit.ly模块。请注意,由于我保持了规则的简单性,所以我使用了page:env(“调用方”)而不是示例中的event:param(“位置”)。我还注意到tiny url需要“http://”前缀fwiw
  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;
    }

  }
  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;
  }