- 締切済み
HttpPostでクエリが送信できない
とりあえずAndroidのソースなのでAndroidのカテゴリにします 次のようなスクリプトをeclipseで組んでみたのですが、実際に実行するとparamsで指定したクエリが全く送信できていません。javaです。 connectUrlはhttp://shindanmaker.com/(診断ページ番号)で、 paramsには "u" : (診断内容) "from" : ""(空の文字列) が入っています。 文字化けは大丈夫です。 アドバイスお願いします。 public String httpPostRequest( String connectUrl, List<NameValuePair> params, String encode ){ //-----[クライアント設定] try { HttpClient httpclient = new DefaultHttpClient(); // MultipartEntity entity = new MultipartEntity(); //テキストの送信 // for( NameValuePair pair : params ){ // entity.addPart( pair.getName(), new StringBody(pair.getValue(),Charset.forName(HTTP.UTF_8))); // } // entity.addPart(filePair.getName(), new FileBody(file,"application/octet-stream")); HttpPost httppost = new HttpPost(connectUrl); httppost.setURI(new URI(connectUrl)); httppost.setHeader("User-Agent", "Android"); httppost.setHeader("Content-type","text/html"); httppost.setHeader("Content-Type", "multipart/form-data"); httppost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE,false); //-----[POST送信] httppost.setEntity(new UrlEncodedFormEntity(params, encode)); HttpResponse response = httpclient.execute(httppost); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); response.getEntity().writeTo(byteArrayOutputStream); //-----[サーバーからの応答を取得] if(response.getStatusLine().getStatusCode() != HttpStatus.SC_OK){ Toast.makeText(this, "[error]: "+response.getStatusLine(), Toast.LENGTH_LONG).show(); return null; } // return EntityUtils.toString( response.getEntity());//.getBytes( encode ).toString(); return byteArrayOutputStream.toString(); } catch (Exception e){ e.printStackTrace(); return null; } }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- okgoripon
- ベストアンサー率44% (1141/2548)
httpリクエストを見ることが出来るツール(FirefoxブラウザならLive HTTP Headersアドオンとかが使えます)で、そのサイト(shindanmaker.com)にアクセスした結果を見てみましたが、単純なPOSTリクエストではないようですね。 プログラムコードの正当性以前に、送信しているPOSTリクエストがサーバの要求する仕様を満たしていないと思われるので、まずはそこを解析するところから始めるべきかと。
補足
ありがとうございます。 既に他のプログラミング言語で、"u=(診断内容)&from="のパラメータで、診断結果が取得できることを確認しています。 が、これと同じパラメータを変数paramsで指定しているにも関わらず、このソースで取得されるレスポンスは診断結果が表示されていない、いわゆる診断ごとのトップページになってしまいます。 ちなみに、paramsにはBasicNameValuePairで各値を格納してあります。