👑

redirect URL ... Ruby の場合 / Python の場合 / golang の場合 / Nim の場合

2021/08/24に公開

一度書いたら、も一度修正すること無い場合がほとんどなので印象が薄い ... リダイレクトしたアドレスについて、Ruby で書いてみたプログラム Python にして Golang にして、Nim をはじめてみたら、Python の requests のようなものが、あるのか無いのかさえ探せないので Nim gitter で質問して教えてもらった。

ふりかえってみると、どれも一度づつしか悩まなかったので簡単だったような気がしていたが、思い出そうとしたときそれは過ぎ去った過去のオリンピックスたちのように空白で、何も思い出せなかったので、並べてみる。

cURL

>curl -I -s 'http://idontknow.where.to.go/?redirect="' | grep 'location'

Ruby

require 'net/http'
require 'uri'

target_url ="http://idontknow.where.to.go/?redirect="

uri = URI.parse(target_url)

def get_url(uri)
    redirect = Net::HTTP.get_response(uri)['location']
    return redirect
end

redirect_url = get_url(uri)

puts redirect_url

Python

import requests

target_url = "http://idontknow.where.to.go/?redirect="

res = requests.get(target_url)
redirect_url = res.url

Print(redirect_url)
import pycurl

c = pycurl.Curl()

c.setopt(c.URL, 'http://idontknow.where.to.go/?redirect')
# Follow redirect.
c.setopt(c.FOLLOWLOCATION, 0) # True: 1 / False : 0 
c.perform()

print(c.getinfo(c.REDIRECT_URL))
#print(c.getinfo(c.EFFECTIVE_URL))
c.close()

Rf.http://pycurl.io/


Golang

package main

import (
    "fmt"
    "net/http"
    )

func main(){
    const target_URL = "https://idontknow.where.to.go/?redirect="

    resp, _ := http.Get(target_URL)
    defer func() {
        resp.Body.Close()
    }()

    redirect_URL := resp.Request.URL.String()                                        
    fmt.Println(redirect_URL)
}

Nim-lang

#nim4colab
%%nimdevc -d:ssl

import httpclient

proc getRedirectTarget(domain: string): string =
  let client = newHttpClient(maxRedirects = 0)
  var redirected_url = domain
  var resp = client.head(redirected_url)
  while resp.headers.hasKey("location"):
    redirected_url = resp.headers["location"]
    #echo "redirected: ", redirected_url
    resp = client.head(redirected_url)
  return redirected_url

let targetUrl = "http://idontknow.where.to.go/?redirect="

echo "redirect: ", getRedirectTarget(targetUrl)

https://github.com/nim-lang/Nim/pull/18738

Discussion