1

次のコードを実行していますが、urlConnection.getInputStream() で常に EOFException が発生します。Web サーバーが適切なヘッダーを返していないことはわかっていますが、Web ブラウザーで同じ URL を使用すると、期待されるコンテンツが返されます。

URL url1;
try
{
    url1 = new URL("http://63.255.173.242/get_public_tbl.cgi?A=1");
    HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();
    try 
    {
        InputStream in = new BufferedInputStream(urlConnection.getInputStream());
        readStream(in);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        urlConnection.disconnect();
    }
}
catch (MalformedURLException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}

何か案は?

編集1:

私は可能な解決策に取り組んでいると思いました。Android 2.3 を使用すると、(ヘッダーがなくても) getHeaderFields() を呼び出すことで応答を読み取ることができますが、Android 4.1 を使用すると getHeaderFields() は null を返します。何か案は?

url1 = new URL("http://63.255.173.242/get_public_tbl.cgi?A=1");
URLConnection urlConnection = url1.openConnection();
Map<String, List<String>> fields = urlConnection.getHeaderFields();
4

3 に答える 3

2

サーバーが適切なHTTPを通信していないため、URL.openConnectionを使用することはできませんが、63.255.173.242ポート80へのプレーンソケット接続を使用してアクセスし、文字列を送信することはできます。

GET /get_public_tbl.cgi?A=1 HTTP / 1.0 \ r \ n \ r \ n

次に、結果のストリームを読み取ります。

于 2012-11-04T01:53:49.917 に答える
1

サーバーが HTTP ヘッダーで応答していません。 を使用してみてくださいgetErrorStream

emil$ curl -v http://63.255.173.242/get_public_tbl.cgi?A=1
* About to connect() to 63.255.173.242 port 80 (#0)
*   Trying 63.255.173.242... connected
* Connected to 63.255.173.242 (63.255.173.242) port 80 (#0)
> GET /get_public_tbl.cgi?A=1 HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
> Host: 63.255.173.242
> Accept: */*
> 
<?xml version="1.0" encoding="UTF-8"?>
<record table="public" stationID="1" timestamp="19:49:40  11/03/2012" record_number="18372">
<value>
<name>SaveSite</name>
<data>0.00</data>
</value>
<value>
<name>Latitude</name>
<data>-111.00</data>
...
于 2012-11-04T01:44:34.670 に答える
0

次のように応答を読んでみてください。

BufferedReader in = new BufferedReader(new InputStreamReader(
    response.getEntity().getContent(), "UTF-8"));

char[] buf = new char[1000];
int l = 0;
while (l >= 0) 
{
    builder.append(buf, 0, l);
    l = in.read(buf);
}

get xml コード クラス GetXMLTask.java のサンプル コード

public class GetXMLTask
{
    public ArrayList<JSONObject> getOutputFromUrl(String url) 
    {
        ArrayList<JSONObject> output = new ArrayList<JSONObject>();
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        HttpResponse response;
        StringBuilder builder= new StringBuilder();
        JSONObject myjson ;
        JSONArray the_json_array;
        try 
        {
            response = httpClient.execute(httpPost);
            BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
            char[] buf = new char[1000];
            int l = 0;
                while (l >= 0) 
                {
                    builder.append(buf, 0, l);
                    l = in.read(buf);
                }
            myjson = new JSONObject("{child:"+builder.toString()+"}");
            the_json_array = myjson.getJSONArray("child");
            //System.out.println("json array length()===>>>"+the_json_array.length());//shows no of child
            for (int i = 0; i < the_json_array.length(); i++) 
            {
                JSONObject another_json_object =  the_json_array.getJSONObject(i);//the_json_array.getJSONObject(i);
                //System.out.println("json object length()"+another_json_object.length());
                    output.add(another_json_object);
            }
        } catch (ClientProtocolException e) {
            System.out.println("ClientProtocolException :"+e);
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("IOException :"+e);
            e.printStackTrace();
        } catch (JSONException e) {
            System.out.println("JSONException hussain :"+e);
            e.printStackTrace();
        }
        //System.out.println(output);
        //System.out.println(output.toString());
        return output;
    }
}
于 2012-10-30T10:54:52.847 に答える