0

HTTP POST/GET に BufferedInputStream を使用する

しかし、以下のエラーが発生します

  1. java.io.FileNotFoundException: http://XX.XX.XX.XX/WebWS/data.aspx
  2. トランスポート エンドポイントが接続されていません

このエラーが発生する理由。私のコードは以下です

URL url = new URL(glob.postUrl);

    HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();

    try {

        httpConn.setDoInput(true);
        httpConn.setDoOutput(true);
        httpConn.setRequestMethod("GET");
        httpConn.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded");
        httpConn.setRequestProperty("Content-Language", "TR");      
        httpConn.setConnectTimeout(12000);


        Iterator<String> reqProps = hMap.keySet().iterator();
        while (reqProps.hasNext()) {
            String key = reqProps.next();
            String value = hMap.get(key);
            httpConn.addRequestProperty(key, value);
        }

        InputStream in = new BufferedInputStream(httpConn.getInputStream());

        StringBuilder builder = new StringBuilder();
        String line;
        try {
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(in, "UTF-8"));
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
        } finally {
            in.close();
        }
        httpConn.disconnect();

ありがとう。

4

2 に答える 2

2

使っていない理由はありますHttpClientか?

コードを次のようなものに置き換えることができます。

HttpContext httpContext = new BasicHttpContext();
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse response = httpClient.execute(httpGet, httpContext);
int statusCode = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
String page = EntityUtils.toString(entity);

セキュリティのために ClientConnectionManager と HttpParams を使用して HttpClient を設定し、初期化時にクライアントのさまざまな http パラメータを設定できます (クラス名を検索すると、多くの例が見つかります)。

于 2011-07-01T14:31:27.770 に答える
0

HttpURLConnectionImpl.getInputStream()FileNotFoundExceptionは、HTTP 応答ステータス コードが 400 以上の場合、つまりサーバー側のエラー状態の場合に をスローすることが知られています。適切なデバッグ情報を取得するには、ステータス コードが実際に何であるかを確認する必要があります。

ただし、私は HttpClient の使用に関する Mark Fisher の提案を 2 番目に支持します。これは、AFAIK が Android で HTTP を操作するための推奨される方法です。

于 2011-07-01T15:00:25.927 に答える