👑
redirect URL ... Ruby の場合 / Python の場合 / golang の場合 / Nim の場合
一度書いたら、も一度修正すること無い場合がほとんどなので印象が薄い ... リダイレクトしたアドレスについて、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()
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)
Discussion