我正在構建一個java程序,該程序可以在嵌入式播放器中播放YouTube視頻。 問題是,大多數音樂視頻都不會播放,並且出現以下錯誤: 「此視頻包含(媒體公司名稱)的內容,它在某些網站上播放受到限制。如何解決YouTube API嵌入其他網站的限制問題?
我試圖加載在Chrome相同的URL,並得到了相同的結果。 https://www.youtube.com/embed/TMZi25Pq3T8
然而,一些研究之後,我很快就固定它通過安裝一個Chrome擴展,讓我增加HTTP請求頭,並增加了的Referer頭遵循此結構「https://www..com」,並得到了它的工作。
所以我想那一定是它。
URI uri = URI.create("https://www.youtube.com/embed/TMZi25Pq3T8");
List<String> cookies = new ArrayList<>();
cookies.add("User-Agent=BDM/v0.92");
cookies.add("Referer=https://www.youtube.com");
Map<String, List<String>> headers = new LinkedHashMap<String, List<String>>();
headers.put("Set-Cookie", cookies);
try {
CookieHandler.getDefault().put(uri, headers);
} catch (IOException ex) {
ex.printStackTrace();
}
System.out.println(webView.getEngine().getUserAgent());
webView.getEngine().load(uri.toString());
儘管如此,沒有成功,同樣的錯誤信息: 我爲了請求頭添加到我的的JavaFX的WebView/WebEngine添加以下代碼。
我用來通過API提取有關發佈的數據的網站Discogs也能夠播放「受限制」的視頻。我在這裏錯過了什麼?
以後編輯: 進一步澄清:
我想爲我所犯的錯誤道歉:
- 線
System.out.println(webView.getEngine().getUserAgent());
不打印 「BDM/V0.92」 爲我首先聲明它打印默認的JavaFX用戶代理「Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/538.19(KHTML,如Gecko)JavaFX/8.0 Safari/538.19」。這導致編號爲2 - 正如Roman Nazarenko指出的那樣,我將cookies與請求頭混淆在一起。
這導致了一個真正的問題,我如何發送JavaFX WebEngine的HTTP請求標頭?唯一的選擇是通過調用webView.getEngine().setUserAgent("myUserAgent");
我發現一個黑客在這裏,但這個didin't爲我工作,設置用戶代理:https://twitter.com/codingfabian/status/524942996748652544
謝謝!
錯誤來自API調用嗎?如果是這樣,您可能需要檢查提交請求時應該發送哪些參數。這樣,如果從API中引發錯誤,您將能夠識別任何缺失的參數。 –
你在講關於標題,但你在這裏設置cookie。這些不是一回事。 –
你有沒有試過讀這個? http://stackoverflow.com/questions/13407482/youtube-embed-gives-restricted-from-playback-on-certain-sites-error-despite-ap。另外,我找到了這個YouTube工程和開發人員博客:http://youtube-eng.blogspot.co.uk/2011/12/understanding-playback-restrictions_28.html。它可能會幫助你。 –