1

Shoutcastサーバーから曲のタイトルを取得しようとしています。だから、私の考えは、Shoutcastサーバーの7.htmlページで少し正規表現を行うことでしたが、7.htmlページを受信するための単純なHttpGetリクエストを取得することはできません。私は何が間違っているのですか?

リンクからポート番号を削除すると、HttpGetは問題なく実行されますが、結果が得られません。

private class GetTrackInfo extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... Urls) {

        String url = urls[0];
        if(!url.contains("http://")) url = "http://" + url;
        url = url + "/7.html";
        HttpParams params = new BasicHttpParams();
        HttpClient httpclient = new DefaultHttpClient(params);
        HttpGet http = new HttpGet(url);
        HttpResponse response = null;
        try {
            response = httpclient.execute(http);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            response.getEntity().writeTo(out);
        } catch (IOException e) {
            e.printStackTrace();
        }        
        String res = out.toString();
        return res;
    }

    @Override
    protected void onPostExecute(String result) {
        Log.i("GetTrack", "Track result: " + result);
        String[] results = result.split(",");
        String track = results[results.length-1];
        fplayer.setStreamInfoTxt(track);
    }

}

エラーとして、私は次のようになります。

01-29 23:28:10.461:W / System.err(962):org.Apache.http.client.ClientProtocolException 01-29 23:28:10.471:W / System.err(962):org.Apacheで。 http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:557)01-29 23:28:10.471:W / System.err(962):org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient) .Java:487)01-29 23:28:10.471:W / System.err(962):org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:465)01-29 23:28 :10.471:W / System.err(962):com.imsgroups.exyuradio.services.PlayerService $ GetTrackInfo.doInBackground(PlayerService.Java:257)01-29 23:28:10.471:W / System.err(962) :com.imsgroups.exyuradio.services.PlayerService $ GetTrackInfo.doInBackground(PlayerService.Java:1)01-29 23:28:10.481:W / System.err(962):Android.os.AsyncTask $ 2.call( AsyncTask.Java:185)01-29 23:28:10.481:W / System.err(962):Java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.Java:305)01-29 23:28:10.491:W / System.err(962):Java.util.concurrent.FutureTask.run(FutureTask.Java:137)01-29 23:28:10.491:W / System.err(962):Java.util.concurrent.ThreadPoolExecutor .runWorker(ThreadPoolExecutor.Java:1068)01-29 23:28:10.491:W / System.err(962):Java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.Java:561)01-29 23 :28:10.491:W / System.err(962):Java.lang.Thread.run(Thread.Java:1096)01-29 23:28:10.491:W / System.err(962):原因: org.Apache.http.ProtocolException:サーバーが有効なHTTP応答で応答できませんでした01-29 23:28:10.511:W / System.err(962):org.Apache.http.impl.conn.DefaultResponseParser.parseHeadで(DefaultResponseParser.Java:93)01-2922:28:10。511:W / System.err(962):org.Apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.Java:174)01-29 23:28:10.511:W / System.err(962): at org.Apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.Java:179)01-29 23:28:10.511:W / System.err(962):atorg.Apache.http.impl.conn.DefaultClientConnection。 receiveResponseHeader(DefaultClientConnection.Java:235)01-29 23:28:10.522:W / System.err(962):org.Apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.Java:259)01-29 23:28:10.522:W / System.err(962):org.Apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.Java:279)01-29 23:28:10.522:W / System.err(962 ):org.Apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.Java:121)01-29 23:28:10.522:W / System.err(962):org.Apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.Java:410)01-29 23:28:10.541: W / System.err(962):org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:555)

4

2 に答える 2

1

私はそれを理解することができました!私は実際にString url変数に問題がありました。この文字列を URLEncode でエンコードした後、ファイルからこれらの URL を取得したため、%0A%0D があることがわかりました。(%0A%0D はエスケープと改行の文字です。詳しくはこちらを参照してください) すべてが魅力的に機能しています! 皆さん、Http リクエストを行う前に、常に URL を再確認してください。

于 2013-01-30T15:42:11.410 に答える
0

変数を変更していurlますが、元のパラメーターをHttpGet

 HttpGet http = new HttpGet(urls[0]);

そのためurls[0]、プロトコルがまだ存在しない場合http:は追加されません。私はあなたが次のことを望んでいると思います -

HttpGet http = new HttpGet(url);
于 2013-01-29T22:48:45.940 に答える