2012-03-31 20 views
2

私はこのコードを手に入れました。これで動作するようになりました。これで基本的にHTTP投稿を送信し、要素に名前属性が含まれていない限りほとんどの外部Webサイトに要求を送信できます。ここでは例です:HTTPリクエストを送信してGET/POSTをJavaで作成するには?

これは、Javaコードです:

public static String sendPostRequest(String url) { 

    StringBuffer sb = null; 

    try { 

     String data = URLEncoder.encode("user", "UTF-8") + "=" 
       + URLEncoder.encode("myUserName", "UTF-8") + "&" 
       + URLEncoder.encode("submit", "UTF-8") + "=" 
       + URLEncoder.encode("Submit", "UTF-8"); 


     URL requestUrl = new URL(url); 
     HttpURLConnection conn = (HttpURLConnection) requestUrl 
       .openConnection(); 
     conn.setDoOutput(true); 
     conn.setRequestMethod("GET"); 

     OutputStreamWriter osw = new OutputStreamWriter(
       conn.getOutputStream()); 
     osw.write(data); 
     osw.flush(); 

     BufferedReader br = new BufferedReader(new InputStreamReader(
       conn.getInputStream())); 

     String in = ""; 
     sb = new StringBuffer(); 

     while ((in = br.readLine()) != null) { 
      sb.append(in + "\n"); 
     } 

     osw.close(); 
     br.close(); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return sb.toString(); 
} 

これは私が(それがこのサイトhttp://www.w3schools.com/html/html_forms.aspされ、W3Schoolsのサイト上のフォームの)に要求を送信しようとしている形です。

<form name="input0" target="_blank" action="html_form_action.asp" method="get"> 

Username: 

<input type="text" name="user" size="20" /> 

<input type="submit" value="Submit" /> 

</form> 

送信]ボタンをname属性を持っていないので、私は(私はそれがこのケースでgetメソッドを知っている)、それを適切なHTTP GET/POSTリクエストを送信することはできません。実際にこのフォームにリクエストを送信するために、Stringデータを(どのような適切なキー/値と)置き換えるのですか?私はhttpリクエスト

のHttpClientを生成するためのHttpClientを使用しています

答えて

1

は、オープンソースのApacheプロジェクトです。あなたは広くコードを取得することができます。 HttpClientをバージョン4.1には、あなたがすべてで、あなたのデータにsubmit一部を追加しないのHttp API

HttpClient Learning Artical

+0

?私は特定のサイトにHTTP Post Requestを送信するために使用する必要があるキー/値を尋ねています... – ZimZim

+0

@ user1007059:HttpClientはあなたの問題を解決するための優れた可読性を提供します...私はこのプロジェクトでhttpclien 4.1を使用していて、任意のURLからデータを取得しています。 –

1

の良いセットです。これは、ブラウザが「送信」ボタンがアクションをトリガーすることを知るためのものです。新しく開かれたサイトのURLが次のように表示されます。http://www.w3schools.com/html/html_form_action.asp?user=myUserName - ここにはsubmitの部分はありません。

String data = URLEncoder.encode("user", "UTF-8") + "=" 
      + URLEncoder.encode("myUserName", "UTF-8"); // end here 
+0

ehmは動作しません.html_form_action.aspサイトでもhtml_forms.aspサイトでも使用できます。私は他のサイトで試してみましたが、送信ボタンの部分を追加しないとうまくいきませんでした... – ZimZim

+0

これは、 'getOutputStream()を呼び出すと' GET'リクエストが自動的に 'POST'に置き換えられている可能性があります。 '。これは通常、作者が意味するものなので、行うべき合理的なことです。本当に 'GET'リクエストを発行するには、' OutputStreamWriter'部分全体を削除し、有効なGETリクエストのように 'data'をURLに追加してください:' URL requestUrl = new URL(url + "?" + data); ' 。もちろん、 'submit'部分は追加しません。 –

+0

しかし、これはGETリクエストではなく、特定のURLのHTMLソースを直接取得するだけです。私は要求を送る必要があります。私はoutputstreamを完全に削除することによってこれを試みましたが、それでも間違ったデータを返すだけです。 – ZimZim

0

// HTTP GETリクエスト

HttpClient httpClientDefault1 = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost("http://www.your.targer.url.com/page.html"); 

//セットアップヘッダ(Serverは、いくつかのブラウザによって要求スローを理解する)

httpPost.setHeader("Connection", "keep-alive"); 
httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"); 
httpPost.setHeader("Accept", " text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
httpPost.setHeader("Accept-Language", "en-us,en;q=0.5"); 
httpPost.setHeader("Host", "ec2-23-20-44-83.compute-1.amazonaws.com"); 

httpPost作る:だからあなたのdataのコードは次のようになります。 .setHeader( "Referer"、resultUrl + resultUrlAsp);

//セット

ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(); 
nameValuePair.add(new BasicNameValuePair("key","")); 
nameValuePair.add(new BasicNameValuePair("txtenroll","095020693015")); 
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); 

が//要求に送るパラメータ

HttpResponse httpRespnse = httpClientDefault1.execute(httpPost); 

、レスポンスボディも

if(httpRespnse.getStatusLine().getStatusCode() != 200) { 
    InputStream in = httpRespnse.getEntity().getContent(); 
    byte b[] = new byte[1024] ; 
    StringBuilder html = new StringBuilder(""); 
    while(in.read(b) != -1) { 
     html.append((new String(b)).toString()); 
     b = new byte[1024]; 
    } 
    System.out.println(html); 
} 

あなたは、ヘッダー、HTTPパラメータ、クッキーを取得することができ、管理//取得Javaコードを介したセッション... :) :)

+0

これはApacheライブラリを使用することに注意してください。 – mateuszb

0

私はすべてのマルチパートやファイルなどを処理するClientHttpRequestクラスを持っています。オプションの進捗状況の追跡とキャンセルがあります。約10年間続いています。使い方は簡単です。 Scalaバージョンもあります。これは私がやろうとしているものに比べどのような方法でどのようにhttps://github.com/vpatryshev/ScalaKittens/blob/master/src/main/scala/scalakittens/ClientHttpRequest.scala

http://myjavatools.com/

関連する問題