Golang http-клиент перенаправляется для входа в частный URL-адрес bitbucket вместо сбоя аутентификации - PullRequest
1 голос
/ 31 января 2020

Попытка загрузить частное репозиторий bitbucket https://bitbucket.org/md-shabbir/test-repo/get/master.tar.gz с помощью golang http-клиента без предоставления аутентификации.

package main

import (
    "net/http"
    "fmt"
)

func CheckRedirect(req *http.Request, via []*http.Request) error {
    fmt.Println("Redirect URL: ", req.URL)
    return nil
}

func main() {
    client := &http.Client{}
    client.CheckRedirect = CheckRedirect
    req, err := http.NewRequest("GET", "https://bitbucket.org/md-shabbir/test-repo/get/master.tar.gz", nil)
    if err != nil {
        fmt.Println("Error: ", err)
        return
    }
    res, err := client.Do(req)
    if err != nil {
        fmt.Println("Error: ", err)
        return
    }
    fmt.Println("Status code: ", res.StatusCode)
}

Вывод:

Redirect URL:  https://bitbucket.org/account/signin/?next=/md-shabbir/test-repo/get/master.tar.gz
Redirect URL:  https://bitbucket.org/socialauth/login/atlassianid/?next=%2Fmd-shabbir%2Ftest-repo%2Fget%2Fmaster.tar.gz
Status code:  200

Я ожидаю, что запрос должен вернуть http код 401 с аутентификация завершилась неудачно , но он дает 200 .

Однако я попытался получить доступ к тому же URL с помощью curl, wget и python тоже, и все они дают ожидаемый код возврата 401 .

Ответы [ 2 ]

2 голосов
/ 31 января 2020

Ваш клиент перенаправлен на страницу входа, которая возвращает StatusCode из 200.

Первый перенаправление (302 с Location: /account/signin/?next=/md-shabbir/test-repo/get/master.tar.gz), а также второе (302 Found с Location: https://bitbucket.org/socialauth/login/atlassianid/?next=%2Fmd-shabbir%2Ftest-repo%2Fget%2Fmaster.tar.gz).

Эта страница входа возвращает код состояния 200, который вы видите.

Если вы не хотите, чтобы ваш клиент следовал этим перенаправлениям , вы можете вернуть ненулевую ошибку из CheckRedirect.

Я не уверен, действительно ли это решит проблему (так как в BitBucket все еще может возвращаться 302), но вы также не можете продолжить любой перенаправляет на этот URL и рассматривает их как ошибки.

0 голосов
/ 31 января 2020
If using https in Golange enable ssl , Try this below code like.

 http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
    _, err := http.Get("https://bitbucket.org/md-shabbir/test-repo/get/master.tar.gz")
    if err != nil {
        fmt.Println(err)
    }
...