1

私は現在、投稿リクエストを送信し、対応する応答を処理するために、Android アプリケーションを開発しています。

投稿リクエストを対応する URL にヒットさせることはできますが、レスポンスを取得しようとすると、HTML コンテンツの半分に続いて「*Couldn't read CGI input from STDIN.AFTER ALLOC_READ 0*」が表示されます。

誰でもこの問題を解決するのを手伝ってくれませんか。

ここにコードスニペットがあります

private void processRequest(String... params){

        HttpPost post = new HttpPost("http://www.xyz.com");
        HttpParams httpParams = post.getParams();
        pnr = params[i];
        httpParams.setParameter("param1", params[i]);
        //User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1
        httpParams.setParameter(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1");

        post.setParams(httpParams);
        HttpClient client = new DefaultHttpClient();

        try {
            HttpResponse response = client.execute(post);

            HttpEntity entity = response.getEntity();


            try {
                processHtmlString(pnr, inputStreamToString(entity.getContent()).toString());
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            client.getConnectionManager().shutdown();
        }
  }


   private String processHtmlString(String pnr, String htmlString) throws Exception{

    int index = 0;
    while(index < htmlString.length()){
        int endIndex = (index + 3000) < (htmlString.length()) ? (index + 3000) : htmlString.length();
        Log.i("HttpHelper1","HTML1 : "+htmlString.substring(index, endIndex));
        index += 3000;
    }
    }

そして、出力は ....Couldn't read CGI input from STDIN.AFTER ALLOC_READ 0 です

4

2 に答える 2

1

リクエストを正しく形成していないようです(本文ではなく、同じセクションヘッダーにパラメーターを入れています):これを試してください。

    List<NameValuePair> bodyParams = new ArrayList<NameValuePair>();
    bodyParams.add(new BasicNameValuePair("param1", params[i]);
    if (bodyParams.size() > 0) {
        try {
            // Include the request body
            post.setEntity(new UrlEncodedFormEntity(bodyParams));
        } catch (UnsupportedEncodingException e) {
            throw new IllegalStateException("Body parameters produced unsupported encoding?", e);
        }
    }
于 2012-11-06T19:48:49.013 に答える
0

文字列を使用しないでください。エンティティ自体によって提供される InputStream を使用してください。String は長さが制限されているため、おそらく問題が発生します。ストリームから直接読み取ります。

于 2012-11-06T19:58:30.333 に答える