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

GAE Golang-网址提取超时?

任文乐
2023-03-14
问题内容

我在Go上的Google App
Engine上遇到urlfetch的超时问题。该应用似乎不想花费超过5秒的超时时间(它忽略了更长的超时并在自己的时间后超时)。

我的代码是:

var TimeoutDuration time.Duration = time.Second*30

func Call(c appengine.Context, address string, allowInvalidServerCertificate bool, method string, id interface{}, params []interface{})(map[string]interface{}, error){
    data, err := json.Marshal(map[string]interface{}{
        "method": method,
        "id":     id,
        "params": params,
    })
    if err != nil {
        return nil, err
    }

    req, err:=http.NewRequest("POST", address, strings.NewReader(string(data)))
    if err!=nil{
        return nil, err
    }

    tr := &urlfetch.Transport{Context: c, Deadline: TimeoutDuration, AllowInvalidServerCertificate: allowInvalidServerCertificate}

    resp, err:=tr.RoundTrip(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return nil, err
    }
    result := make(map[string]interface{})
    err = json.Unmarshal(body, &result)
    if err != nil {
        return nil, err
    }
    return result, nil
}

无论我尝试设置什么TimeoutDuration,该应用程序都会在5秒钟后超时。如何防止它这样做?我的代码有错误吗?


问题答案:

您需要像这样传递持续时间(否则它将默认为5秒超时):

tr := &urlfetch.Transport{Context: c, Deadline: time.Duration(30) * time.Second}

2016年1月2日更新:

有了新的GAE
golang软件包(google.golang.org/appengine/*),情况已经改变。urlfetch不再在运输中收到最后期限持续时间。

现在,您应该通过新的上下文包设置超时。例如,这是您设置1分钟期限的方式:

func someFunc(ctx context.Context) {
    ctx_with_deadline, _ := context.WithTimeout(ctx, 1*time.Minute)
    client := &http.Client{
        Transport: &oauth2.Transport{
            Base:   &urlfetch.Transport{Context: ctx_with_deadline},
        },
    }


 类似资料:
  • 这是我想得到的所有“总流量”输出的url 如何使用 JSON 获取此输出?

  • 问题内容: 这是一个简单的问题,但是我不明白。我想检测字符串中的url,然后将其替换为较短的url。 我从stackoverflow找到了这个表达式,但是结果仅仅是 有更好的主意吗? 问题答案: m.group(1)为您提供第一个匹配组,即第一个捕获括号。这是 您应该尝试查看m.group(0)中是否有内容,或者用括号将所有模式括起来,然后再次使用m.group(1)。 您需要重复查找功能以匹配下

  • 问题内容: 所以,我的问题相对简单。我有一只蜘蛛在多个站点上爬行,我需要它按照我在代码中写入的顺序返回数据。它发布在下面。 结果以随机顺序返回,例如,返回29,然后28,然后30。我已经尝试将调度程序的顺序从DFO更改为BFO,以防万一这是问题所在,但这并没有改变。 问题答案: 定义在方法中使用的URL 。下载页面时,将为你的方法调用每个起始URL的响应。但是你无法控制加载时间-第一个起始URL可

  • 问题内容: 我有一个 要求: 我想知道默认的超时时间是多少?以及如何将其设置为3秒或不定秒的特定值? 问题答案: 它没有指定的默认值。该规范根本没有讨论超时。 通常,您可以为承诺实现自己的超时包装器: 如https://github.com/github/fetch/issues/175中所述 (https://github.com/mislav)

  • 问题内容: 例如: 如何提取“ http://www.google.com”? (每个链接的格式都相同,即“ http://”) 问题答案: 可能有几种方法可以做到这一点,但最干净的方法是使用正则表达式 如果可以有多个链接,则可以使用类似于以下内容的链接

  • 问题内容: 我正在尝试从subreddit提要中提取图像发布URL,并在页面上呈现元素。 一段时间以来,我一直在尝试从jQuery Docs中窃取 Flickr示例,但我一无所获。 有问题的代码: 在体内,我具有以下元素: 我了解我需要使用JSONP,但不确定如何使用。有人可以指出我正确的方向吗? 问题答案: 您使用的网址错误。用这个: 编辑: 基于您的评论中的小提琴的工作示例。 你应该使用而不是