3

我有一個Play v1.2.5應用程序,我已配置爲依賴於Github release binary。爲了支持我創建一個自定義庫在我dependencies.yml文件,如下所示:如何獲得Play v1.2.5安裝存儲爲github發佈二進制文件的依賴關係

- github: 
     type: http 
     artifact: "https://github.com/[organisation]/[module]/releases/download/[revision]/[module]-[revision].zip" 
     contains: 
      - tazmaniax -> * 

這正常工作和常春藤是能夠構造正確的URL但隨後由於獲取Github上重定向的二進制資源問題到AWS S3並在此過程中將協議從https更改爲http。顯然,標準的Java HttpUrlConnection是Ivy默認使用的,只要協議沒有改變,它就會遵循重定向。所以我想看看我能如何解決這個問題。

Play v1.2.5正在使用Ivy v2.2.0封面。常春藤使用類URLHandlerRegistry來決定是否使用HttpUrlConnection,或者如果Apache HttpClient v3.x存在於類路徑中。 HttpClient v3.x可能導航使用不同協議的重定向,但在任何情況下,默認的框架庫都不包含HttpClient v3.x,我試圖避免自定義Play,因爲我需要將它部署到Heroku。

歸根結底,這是一個常青藤發行(或Github上取決於你的觀點),所以從長遠來看,有三種選擇:

  1. 補丁org.apache.ivy.util.url.BasicURLHandler支持與處理重定向協議根據Download binary file from Github using Java更改,然後獲取未來Play版本中包含的Ivy的更新版本。
  2. 修補org.apache.ivy.util.url.URLHandlerRegistry以加載更新版本的Apache HttpClient,例如v4.2,並確保將來的Play版本中包含HttpClient lib以及修補程序。然而,它看起來早期版本的HttpClient v4.2本身有相同的問題,從https重定向到http,HTTPClient unable to establish route between https and http
  3. 獲取Github更改它的重定向策略,以保持在這種情況下https相同的協議。

任何人都可以建議什麼是最佳行動方案? THX

== UPDATE 2013年9月6日==

在重定向協議的變化已經被github上解決,現在重定向保留的請求AWS S3的「https」協議。但是現在,當依賴關係被解析時,在重定向時會返回403,這是因爲AWS S3認證需要缺少Cookie,這是另一個與Ivy使用HttpUrlConnection有關的問題,我猜測上述選項仍然大部分都是相關的重點是添加缺少的Cookie支持。

== UPDATE二零一四年十月一十八日==

我試圖運行play deps . --sync -Djsse.enableSNIExtension=false的建議但問題仍時有發生。相關的響應頭:

Date:Sat, 18 Oct 2014 09:56:33 GMT 
Location:https://s3.amazonaws.com/github-cloud/releases/25392769/2302c572-56ac-11e4-9623-393cafb2c0e5.zip?response-content-disposition=attachment%3B%20filename%3Dplay-markdown-1.9.zip&response-content-type=application/octet-stream&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1413626253&Signature=7gI7fe0CeCzuu73KmcklIVSVPSQ%3D 
Server:GitHub.com 
Set-Cookie:user_session=692wy9ubPTtFAGT-WGjwFdykXc06-SELUtGGhg3i56vyT0SEVEI5UVnhkDsdQigEQagDUq54dyjTSEUW; path=/; expires=Sat, 01-Nov-2014 09:56:33 GMT; secure; HttpOnly 
Set-Cookie:_gh_sess=eyJsYXN0X3dyaXRlIjoxNDEzNjI1ODE1MzkwLCJzZXNzaW9uX2lkIjoiYzFmNzQ0NDRlNmMzYjAwZTE2ZDg4MzVhMDJjNmVhZmMiLCJzcHlfcmVwbyI6InRhem1hbmlheC9wbGF5LW1hcmtkb3duIiwic3B5X3JlcG9fYXQiOjE0MTM2MjYxOTMsInJlZmVycmFsX2NvZGUiOiJodHRwczovL2dpdGh1Yi5jb20vaXZheW5iZXJnL3NlbGVjdDIvY29tbWl0cy9tYXN0ZXIiLCJjb250ZXh0IjoiLyJ9--8c45e0231ec4859b693de524e966cbc4a6582442; path=/; secure; HttpOnly 
Status:302 Found 
Strict-Transport-Security:max-age=31536000; includeSubdomains; preload 

我相信這個問題是常春藤(或稱爲常春藤相關HTTP庫)未在302設置cookie,然後下面的位置,而那些餅乾參數失敗與403.

+0

爲什麼不下載該文件並將其放置在您自己的存儲庫中? – sdespolit

+0

@sdespolit,是的我知道如何做到這一點,但只是試圖只使用提供的依賴機制,這是非常方便,如果只有github不會混亂協議如此接近工作 – tazmaniax

+0

寫一個代理是能夠處理https到http切換可能? – jp10k

回答

1

我有一個類似的問題,解決了通過禁用Java HttpUrlConnection所做的一些檢查,在重定向失敗。您可以按照建議嘗試標記-Djsse.enableSNIExtension=falsehere

+0

我嘗試了命令行'play deps。 --sync -Djsse.enableSNIExtension = false,對於資源https://github.com/tazmaniax/play-markdown/releases/download/1.9/play-markdown-1.9.zip,仍然獲得403 – tazmaniax