Groovyでは、URLクラスを使って簡単にファイルをダウンロードできたり、Web APIのレスポンスをテキストファイルとして保存できたりします。
このようにです。
new File(imageName) << new URL(imageUrl).getBytes()
new File(tempName) << new URL(url).getText()
さて、これらのメソッドでヘッダなどの設定はできないのでしょうか?
実はURL#getText
とURL#getBytes
には次のMap
を引数にとるオーバーロードがあります。
それぞれのドキュメントによると、Map
の要素として次のものが有効なようです。
connectTimeout : the connection timeout
readTimeout : the read timeout
useCaches : set the use cache property for the URL connection
allowUserInteraction : set the user interaction flag for the URL connection
requestProperties : a map of properties to be passed to the URL connection
この部分のコードを見てみます。
requestProperties
で渡したMapは、URL#getBytes(java.util.Map) or URL#getText(java.util.Map)の内部で生成しているURLConnection
のsetRequestProperty
の呼び出しに使われます。
次のコードはUserAgent
とAccept-Language
を設定して、URL#getText(java.util.Map)
を呼び出すコードです。
new File(tempName) << new URL(url).getText(requestProperties: [
"UserAgent": "YOUR USER AGENT",
"Accept-Language", "jp"
])