2017-11-06 10 views
-2

Golangのhttp.Get()を使用すると、複数のリダイレクト後に効果的なURLまたは最終的なURLを取得できますが、URL golangに303のリダイレクトや特殊文字がある場合はほとんどありません奇妙な、私は実際の最終的なURLを得ることができません。私が扱っている例は次のとおりです - "http://swiggy.com//google.com/%2f .."、ブラウザでこのURLを開くとGoogleにリダイレクトされますが、http.Get()を使用して同じことができませんでした正確な有効な最終URLを取得することができません

+0

はあなたのコードを表示します。 Go 1.5以降を使用していますか? –

+0

@CeriseLimónはgo1.9を使用していますが、コードはここにあります - https://pastebin.com/2yAaqtqG – StackB00m

+0

あなたはURL.RawPath機能を持つGoバージョンを使用しています(%2fに必要です)。アプリケーションは、サーバーからのリダイレクトに正しく従います。ブラウザのdevツールと[CheckRedirect](https://godoc.org/net/http#Client.CheckRedirect)を使ってリダイレクトを表示し、何が違うのかを確認することをお勧めします。 –

答えて

2

使用されるUser-Agent、Cookie、IPなど、多くの要因があります。また、時にはDDoS保護の仕組みのために変更することもあります。

あなたはアプリを修正して、ステージをリダイレクト渡す方法を見ることがあります。

結果:

getURL: http://swiggy.com//google.com/%2f.. 
Redirecting: 301 https://swiggy.com/google.com/%2f.. 
Redirecting: 301 https://www.swiggy.com/google.com/%2f.. 
Redirecting: 303 https://www.swiggy.com/google.com/%2f../ 
finalURL: https://www.swiggy.com/google.com/%2f../ 
Req Headers: map[Referer:[https://www.swiggy.com/google.com/%2f..]] 
Resp Headers: map[Date:[Mon, 06 Nov 2017 12:51:20 GMT] Content-Type:[text/html; charset=utf-8] Content-Security-Policy-Report-Only:[default-src 'self';script-src https://chuknu.sokrati.com/15946/ https://www.google-analytics.com/ https://cdn.inspectlet.com/ https://tracking.sokrati.com/ https://connect.facebook.net/ https://bam.nr-data.net/ https://maps.googleapis.com/ https://js-agent.newrelic.com/ https://www.googletagmanager.com/ https://s3-ap-southeast-1.amazonaws.com/static.swiggy/ https://*.juspay.in https://connect.facebook.net/ https://www.googletagmanager.com/ *.swiggy.in *.swiggy.com https://chat2.hotline.io/ 'self' 'unsafe-inline' 'unsafe-eval' 'nonce-150997268072300';style-src https://fonts.googleapis.com/ https://www.swiggy.com/ https://s3-ap-southeast-1.amazonaws.com/static.swiggy/ https://chat2.hotline.io/ 'self' 'unsafe-inline' 'unsafe-eval';img-src https://res.cloudinary.com/swiggy/ https://www.google-analytics.com/ https://www.google.co.in/ https://www.facebook.com/ https://tracking.sokrati.com/ http://api.swiggy.in/ https://api.swiggy.com https://d3oxf4lkkqx2kx.cloudfront.net/ https://maps.googleapis.com/ https://maps.gstatic.com/ https://csi.gstatic.com/ https://fonts.gstatic.com/ https://stats.g.doubleclick.net/ https://googleads.g.doubleclick.net/ https://www.google.com/ data: 'self'; font-src https://www.swiggy.com/ https://fonts.gstatic.com/ data: 'self';connect-src https://hn.inspectlet.com/ https://www.swiggy.com/ https://www.facebook.com/tr/ https://*.juspay.in/txns https://sentry.swiggyapp.com/ 'self';frame-src https://www.facebook.com/tr/ https://chat2.hotline.io/ https://*.webpush.hotline.io 'self';report-uri /csp/log] Etag:[W/"6f97-"] Vary:[Accept-Encoding] X-Data-Origin:[dweb_cluster/port-dweb-06 naxsi/waf rate-limiter-plain/rate-limiter-plain] X-Xss-Protection:[1; mode=block] Strict-Transport-Security:[max-age=31536000; includeSubdomains; preload] X-Frame-Options:[Deny] Set-Cookie:[__SW=sjfsljfd; Path=/]] 

修正コード:

package main 

import (
    "fmt" 
    "net/http" 
) 

func CheckRedirect(r *http.Request, via []*http.Request) error { 
    fmt.Println("Redirecting:", r.Response.StatusCode, r.URL) 
    return nil 
} 

func main() { 
    getURL := "http://swiggy.com//google.com/%2f.." 
    fmt.Println("getURL:", getURL) 
    client := &http.Client{ 
     CheckRedirect: CheckRedirect, 
    } 
    resp, err := client.Get(getURL) 
    if err != nil { 
     fmt.Println(err) 
     return 
    } 
    finalURL := resp.Request.URL.String() 
    fmt.Println("finalURL:", finalURL) 
    fmt.Println("Req Headers:", resp.Request.Header) 
    fmt.Println("Resp Headers:", resp.Header) 
} 
関連する問題