首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HttpUrlConnection包含HTTP而不是JSON

HttpUrlConnection包含HTTP而不是JSON
EN

Stack Overflow用户
提问于 2016-01-07 10:12:17
回答 1查看 614关注 0票数 1

我正在尝试从Youtubeinmp3.com下载一个给定youtube文件的MP3文件

有时它的工作非常好,有时api返回一个HTTP文档,而不是JSON对象。我尝试使用foreach循环和getAudioLink函数向API发送不同的请求,如下面的代码所示。我的musicTitle对象包含三个字符串( VideoID、VideoTitle和ThumbnailURL)。它们都存储在一个列表中,每次我开始搜索时都会创建这个列表。

但是我不知道为什么API有时会返回HTTP文档而不是JSON对象。我得到的错误代码是在解析HTTP文档时触发的,下面也可以看到。

代码语言:javascript
运行
复制
public static void main(String[] args) 
{
    ....

    for (MusicTitle musicTitle : myList) 
    {
        System.out.println(getAudioLink(YOUTUBE_URL_C + musicTitle.getVideoID()));
    }
}

public static String getAudioLink(String inputLink) 
{
    String result = null;
    HttpURLConnection request = null;
    URL url = null;

    try 
    {
        url = new URL("http://YoutubeInMP3.com/fetch/?format=JSON&video=" + inputLink);
        System.out.println(url.toString());
        request = (HttpURLConnection) url.openConnection();
        request.connect();

        InputStreamReader reader = new InputStreamReader((InputStream)request.getContent());

        JsonParser jsonParser = new JsonParser(); // GSON-Library


        JsonObject youtubeInMP3 = (JsonObject)jsonParser.parse(reader).getAsJsonObject();

        if (youtubeInMP3 != null) 
        {
            result = youtubeInMP3.get("link").getAsString();
        }
        request.disconnect();
        reader.close();
    } 
    catch (MalformedURLException e) 
    {
        e.printStackTrace();
    }
    catch (IOException e) 
    {
        e.printStackTrace();
    }

    return result;
}

错误代码:

代码语言:javascript
运行
复制
Exception in thread "main" com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 12 path $
at com.google.gson.JsonParser.parse(JsonParser.java:65)
at Main.getAudioLink(Main.java:51)
at Main.main(Main.java:30)
Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 12 path $
at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1573)
at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1423)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:546)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:429)
at com.google.gson.JsonParser.parse(JsonParser.java:60)
... 2 more

编辑1

例如,如果我搜索带"Volbeat“,它将返回如下所示的HTTP文档。

代码语言:javascript
运行
复制
<!DOCTYPE HTML>
<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Your MP3 Is Ready</title>
<meta name="description" content="Download and alternatively edit your YouTube video before saving the MP3 on your device." />
<meta name="keywords" content="edit, download, convert, youtube, mp3" />
<meta name="author" content="YouTube In MP3" />
<meta name="distribution" content="global">
<meta name="language" content="en" />

<link rel="stylesheet" type="text/css" href="/css/style.css?v=1.2.2">
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,400italic|Roboto' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.min.css"> 

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<meta name="viewport" content="width=device-width, initial-scale=1">

</head>

<body class="home">

<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<header>
<p><a href="/"><img src="/images/icon.png" class="verticalAlign" alt="YouTube In MP3 Icon"> <span class="logoText">YouTubeInMP3.com</span></a></p>
<nav>
    <ul>
                    <li><a><i class="fa fa-bars fa-2x verticalAlign"></i> Menu</a>
            <ul>
                <li><a href="/blog/">Blog</a></li>
                <li><a href="/faq/">FAQ</a></li>
                <li><a href="/tos/">Terms of Service</a></li>
                <li><a href="/privacy/">Privacy Policy</a></li>
            </ul>
        </li>
        <li><a href="/api/"><i class="fa fa-cog fa-2x verticalAlign"></i> API</a></li>
        <li><a href="/"><i class="fa fa-home fa-2x verticalAlign"></i> Home</a></li>
                </ul>
</nav>
</header>   
    <div id="contain-160" class="ad ad-160 loader"></div>

<div class="link-popup" id="linkpopup">

    <div class="popup">

        <h2>Link to this MP3</h2>

        <p><i class="fa fa-link fa-2x verticalAlign"></i> Direct Link:</p>
        <code>http://www.youtubeinmp3.com/download/?video=https://www.youtube.com/watch?v=-2Y4t9elm_A</code>


        <p><i class="fa fa-comment fa-2x verticalAlign"></i> Forum:</p>
        <code>[url=http://www.youtubeinmp3.com/download/?video=https://www.youtube.com/watch?v=-2Y4t9elm_A]Download MP3 - Volbeat - Mary Ann's Place (Official Video)[/url]</code>


        <p><i class="fa fa-code fa-2x verticalAlign"></i> HTML:</p>
        <code>&lt;a href="http://www.youtubeinmp3.com/download/?video=https://www.youtube.com/watch?v=-2Y4t9elm_A"&gt;Download MP3 - Volbeat - Mary Ann's Place (Official Video)&lt;/a&gt;</code>

        <a onclick="toggle_visibility('linkpopup');" class="close">&times;</a>

</div>

</div>

<div class="link-popup" id="editShow">

    <div class="popup">

        <div class="paddingBottomOptions">

             <h2><i class="fa fa-scissors"></i> Cut MP3</h2>

            <input placeholder="Cut From" class="cutMP3Slider" type="text" id="slider-margin-value-min" /> - 
            <input placeholder="Cut To" class="cutMP3Slider" type="text" id="slider-margin-value-max" /><br />

        </div>

        <div class="paddingBottomOptions">

             <h2><i class="fa fa-eye"></i> Show video editor</h2>
            <div class="checkBoxDiv">

                Display Video Editor: <input class="checkBoxRight" type="checkbox" id="displayEditor"><br />
                Always display Video Editor: <input class="checkBoxRight" type="checkbox" id="permanentDisplay">

            </div>

         </div>

        <div class="paddingBottomOptions">

            <h2><i class="fa fa-tag"></i> ID3 Tags</h2>
            <div class="checkBoxDiv">

                Identify ID3 Tags Automatically: <input checked="checked" disabled class="checkBoxRight" type="checkbox" id="autoID3">

            </div>

        </div>

        <h2><i class="fa fa-font"></i> Change MP3 name</h2>
        <input class="fullWidth" value="Volbeat - Mary Ann's Place (Official Video).mp3" placeholder="MP3 Name" type="text" id="customMP3Name" />

         <a onclick="toggle_visibility('editShow');" class="close">&times;</a>

    </div>

</div>

<div class="link-popup" id="shareShow">

     <div class="popup">

        <h2>Spread the word</h2>

        <div class="socialButtons">

            <a target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https://www.facebook.com/YouTubeInMP3com"><i class="fa fa-facebook-square fa-3x verticalAlign"></i></a>
            <a target="_blank" href="https://twitter.com/intent/tweet?text=Simple way to extract audio and download MP3s from YouTube:&url=http://www.youtubeinmp3.com"><i class="fa fa-twitter-square fa-3x verticalAlign"></i></a>
            <a target="_blank" href="http://pinterest.com/pin/create/button/?url=http://www.youtubeinmp3.com&description=Simple way to extract audio and download MP3s from YouTube&media=http://www.youtubeinmp3.com/images/icon.png"><i class="fa fa-pinterest-square fa-3x verticalAlign"></i></a>
            <a target="_blank" href="https://plus.google.com/share?url=http://www.youtubeinmp3.com"><i class="fa fa-google-plus-square fa-3x verticalAlign"></i></a>
            <a target="_blank" href="http://www.tumblr.com/share?v=3&u=http://www.youtubeinmp3.com&s=Simple way to extract audio and download MP3s from YouTube"><i class="fa fa-tumblr-square fa-3x verticalAlign"></i></a> 


        </div>

        <h2>Facebook</h2>

         <div class="facebookMargin">

            <div id="fb-root"></div>
            <script>(function(d, s, id) {
              var js, fjs = d.getElementsByTagName(s)[0];
              if (d.getElementById(id)) return;
              js = d.createElement(s); js.id = id;
              js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5";
              fjs.parentNode.insertBefore(js, fjs);
            }(document, 'script', 'facebook-jssdk'));</script>

            <div class="fb-page" data-href="http://www.facebook.com/YouTubeInMP3com" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="false" data-show-posts="false"><div class="fb-xfbml-parse-ignore"><blockquote cite="http://www.facebook.com/YouTubeInMP3com"><a href="http://www.facebook.com/YouTubeInMP3com">YouTubeInMP3.com - Download MP3 Files From Youtube</a></blockquote></div></div>

         </div>

        <a onclick="toggle_visibility('shareShow');" class="close">&times;</a>

     </div>

</div>

<section class="video">

     <form id="form" action="" method="GET">

        <input id="video" type="search" name="video" placeholder="Paste A Link Or Search For A Video Title" />

        <!-- Small screen search results -->
        <div id="searchResultMobile" class="searchResultMobile loader"></div>

        <button id="searchButton" onclick="search()" type="submit"><i class="fa fa-search"></i> Convert To MP3</button>

        <!-- Large screen search results -->
        <div id="searchResultLarge" class="searchResultLarge loader"></div>

    </form>

            <link rel="stylesheet" property="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/noUiSlider/8.0.2/nouislider.min.css">
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/noUiSlider/8.0.2/nouislider.js"></script>

     <div class="embed loader">

         <div id="player"></div>
         <div id="slider"></div>

    </div>

    <div class="infoBox">   
        <h1 class="titleVideo"><img class="thumbnailTitle" alt="YouTube Thumbnail" src="http://img.youtube.com/vi/-2Y4t9elm_A/default.jpg"> Volbeat - Mary Ann's Place (Official Video)</h1>
                    <p class="floatLeft"><i class="fa fa-clock-o"></i> Length: <span class="bold">
| 
            <a target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https://www.facebook.com/YouTubeInMP3com"><i class="fa fa-facebook-square fa-2x verticalAlign"></i></a>
            <a target="_blank" href="https://twitter.com/intent/tweet?text=Simple way to extract audio and download MP3s from YouTube:&amp;url=http://www.youtubeinmp3.com"><i class="fa fa-twitter-square fa-2x verticalAlign"></i></a>
            <a target="_blank" href="http://pinterest.com/pin/create/button/?url=http://www.youtubeinmp3.com&amp;description=Simple way to extract audio and download MP3s from YouTube&media=http://www.youtubeinmp3.com/images/icon.png"><i class="fa fa-pinterest-square fa-2x verticalAlign"></i></a>
            <a target="_blank" href="https://plus.google.com/share?url=http://www.youtubeinmp3.com"><i class="fa fa-google-plus-square fa-2x verticalAlign"></i></a>
            <a target="_blank" href="http://www.tumblr.com/share?v=3&u=http://www.youtubeinmp3.com&amp;s=Simple way to extract audio and download MP3s from YouTube"><i class="fa fa-tumblr-square fa-2x verticalAlign"></i></a> 

            <script src="/js/social.js" type="text/javascript"></script>

        </p>    

                    <div id="status">

        </div>

        <p class="download-buttons fullWidth">

                            <a class="button fullWidth" id="download" href="get/?i=6%2FARY3w4SlqKhP7hMpnw8skpb2vhQEwDg9rFg6URKpAEbyz736HFUpKqz6uO8TSy5YETAnmYwF995a0lNbbZLw%3D%3D"><i class="fa fa-download"></i> Convert &amp; Download MP3</a>
                            <a onclick="toggle_visibility('editShow');" class="button button-gray"><i class="fa fa-cogs"></i> Settings</a><a rel="nofollow" href="http://www.youtubeinmp4.com/youtube.php?video=http://www.youtube.com/watch?v=-2Y4t9elm_A" class="button button-gray"><i class="fa fa-television"></i> Download in MP4 format</a><a rel="nofollow" href="http://www.saveitoffline.com/go/?l=http://www.saveitoffline.com/#http://www.youtube.com/watch?v=-2Y4t9elm_A" class="button button-gray"><i class="fa fa-file-o"></i> Other Formats</a>
                        </p>


        <div id="contain-300" class="ad ad-300 loader"></div>

        <div class="floatRight">

            <div class="firstBlock">

                <h2 class="firstBlockHeader">How do I download my MP3?</h2>

                Your video has been prepared and is ready to be downloaded.<br />
                To continue, simply press <strong>"Convert &amp; Download MP3"</strong>.<br /><br />

                Your MP3 has been converted to the highest quality possible and ID3 tags have been automatically identified and added.<br />
                You can customize your download by changing the <a class="green" onclick="toggle_visibility('editShow');">Options</a>.<br />

            </div>

            <div class="secondBlock">

                <h2 class="secondBlockHeader">How do I edit my MP3?</h2>

                You can edit your MP3 by clicking "Settings" (grey button, found above on the left side) button.<br>
                There are two ways of editing an MP3 before downloading it:<br>
                <br>
                1) Specify the start and end time manually, in the Settings menu.<br>
                2) Enable the video editor from the Settings menu and use the sliders to set the start and end time.            
            </div>

        </div>          


    </div>

    <span class="messagePage" id="message"></span>

    <link rel="stylesheet" property="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/css/tooltipster.min.css">
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/tooltipster/3.3.0/js/jquery.tooltipster.min.js"></script>

    <script type="text/javascript" src="/js/client.js?v=1.2.1"></script>
    <script type="text/javascript" src="//apis.google.com/js/client.js?onload=init" onload="externalLoad()"></script>       
</section>


    <div id="contain-728" class="ad ad-728 loader"></div>

<script type="text/javascript">
    var durationSeconds = 184;
    var videoId = "-2Y4t9elm_A";
    var editMin = '';
    var editMax = '';
    var convert = 1;
</script>
<script src="/js/process.js?v=1.2.1" type="text/javascript"></script>



<footer>
    <p>Want to forbid downloading a file? <a href="/privacy/">Contact us</a>.<br>
    By downloading content from this site, you agree with the <a href="/tos/">Terms of Service</a>.</p>
</footer>



<div class="loader" id="load-160">

    <!-- Conversant Media 120x600 and 160x600 SkyScraper CODE for YouTubeInMP3 -->
    <script type="text/javascript">var vclk_options = {sid:80572,media_id:3,media_type:7,version:"1.4"};</script><script class="vclk_pub_code" type="text/javascript" src="http://cdn.fastclick.net/js/adcodes/pubcode.min.js?sid=80572&media_id=3&media_type=7&version=1.4&exc=1"></script><noscript><a href="http://media.fastclick.net/w/click.here?sid=80572&m=3&c=1" target="_blank"><img src="http://media.fastclick.net/w/get.media?sid=80572&m=3&tp=7&d=s&c=1&vcm_acv=1.4" width="160" height="600" border="1"></a></noscript>
    <!-- Conversant Media 120x600 and 160x600 SkyScraper CODE for YouTubeInMP3 -->

</div>

<div class="loader" id="load-300">

    <!-- ValueClick Media 300x250 Medium Rectangle CODE for YouTubeInMP3 -->
    <script type="text/javascript">var vclk_options = {sid:80572,media_id:6,media_type:8,version:"1.4"};</script><script class="vclk_pub_code" type="text/javascript" src="http://cdn.fastclick.net/js/adcodes/pubcode.min.js?sid=80572&media_id=6&media_type=8&version=1.4&exc=1"></script><noscript><a href="http://media.fastclick.net/w/click.here?sid=80572&m=6&c=1" target="_blank"><img src="http://media.fastclick.net/w/get.media?sid=80572&m=6&tp=8&d=s&c=1&vcm_acv=1.4" width="300" height="250" border="1"></a></noscript>
    <!-- ValueClick Media 300x250 Medium Rectangle CODE for YouTubeInMP3 -->

</div>  

<div class="loader" id="load-728">

    <!-- Conversant Media 468x60 and 728x90 Banner CODE for YouTubeInMP3 -->
    <script type="text/javascript">var vclk_options = {sid:80572,media_id:1,media_type:5,version:"1.4"};</script><script class="vclk_pub_code" type="text/javascript" src="http://cdn.fastclick.net/js/adcodes/pubcode.min.js?sid=80572&media_id=1&media_type=5&version=1.4&exc=1"></script><noscript><a href="http://media.fastclick.net/w/click.here?sid=80572&m=1&c=1" target="_blank"><img src="http://media.fastclick.net/w/get.media?sid=80572&m=1&tp=5&d=s&c=1&vcm_acv=1.4" width="728" height="90" border="1"></a></noscript>
    <!-- Conversant Media 468x60 and 728x90 Banner CODE for YouTubeInMP3 -->

</div>

<script type="text/javascript" src="/js/loader.js?v=1.2.2"></script>
<script data-cfasync="false" type="text/javascript" src="http://www.onclicktop.com/a/display.php?r=439235"></script>




<!-- Start of StatCounter Code for Default Guide -->
<script type="text/javascript">
var sc_project=8077308; 
var sc_invisible=1; 
var sc_security="6b707000"; 
</script>
<script type="text/javascript"
src="http://www.statcounter.com/counter/counter.js"></script>
<noscript><div class="statcounter"></div></noscript>
<!-- End of StatCounter Code for Default Guide -->

</body>
</html>

编辑2

如果我搜索流行的曲目或乐队,我会收到15种有效结果中的12种。但是如果我搜索没有人愿意听的音轨,我会收到15条有效结果中的1条。

如果管理YoutubeInMp3 API信息的who服务器( webserver)不知道跟踪和相应的下载链接,那么它有可能使用HTTP来回答吗?

编辑3

正如我所设想的,问题是,the服务器不知道跟踪。如果我手动访问接收到的HTML文档的链接,我需要确认轨道被转换了。之后,我可以在我的程序的帮助下,手动下载它。

因此,我猜想HTML响应是一个线索,即has服务器对我的请求没有有效的答复。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-07 11:34:17

..。我不知道为什么API有时会返回一个HTTP文档

HTTP文档很可能是某种类型的错误报告。如果是这样的话,它( HTML文档)应该为您提供一些线索,了解真正的问题是什么。

打印出来的HTML。如果你不明白这份报告的意思,把它加到你的问题上,这样我们就能帮你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34652441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档