2011-08-03 17 views
3

Javaを使用してPOSTデータを送信しようとしています。JavaはPOSTデータを送信します(POSTデータは設定されていますが空です)

public void doSubmit(String url, HashMap<String, String> data) throws Exception { 
    URL siteUrl = new URL(url); 
    HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection(); 
    conn.setRequestMethod("POST"); 
    conn.setDoOutput(true); 
    conn.setDoInput(true); 

    DataOutputStream out = new DataOutputStream(conn.getOutputStream()); 

    Set keys = data.keySet(); 
    Iterator keyIter = keys.iterator(); 
    String content = ""; 
    for(int i=0; keyIter.hasNext(); i++) { 
     Object key = keyIter.next(); 
     if(i!=0) { 
      content += "&"; 
     } 
     content += key + "=" + URLEncoder.encode(data.get(key), "UTF-8"); 
    } 
    System.out.println(content); 
    out.writeBytes(content); 
    out.flush(); 
    out.close(); 
    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String line = ""; 
    while((line=in.readLine())!=null) { 
     System.out.println(line); 
    } 
    in.close(); 
} 

そして、ここでは、私はそれをテストしてい方法です:.phpの中にいくつかのエコー検査の後

HashMap<String, String> data = new HashMap<String, String>(); 
data.put("img", "someuser"); 

doSubmit("http://www.blah.com/b.php", data); 

を、POSTデータが設定されていますが、ここで私が使用しようとしている方法がありますPOST配列は空です。どうして?

答えて

0

connection.setRequestProperty("Accept-Charset", 'UTF-8'); 
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); 
+0

これは機能しませんでした。私はそれを追加し、POSTデータはまだ空です。 – Sam

0

を設定してみてください、私は正確に同じ問題を抱えていたし、ここに解決策が見つかりました:私はやっていたし、どのような例がありませんが、それが生成されているものとの主な違いをhttp://digitallibraryworld.com/?p=189

//import these on your header 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.ProtocolException; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.Scanner; 
//do this wherever you are wanting to POST 
URL url; 
HttpURLConnection conn; 

try{ 
//if you are using https, make sure to import java.net.HttpsURLConnection 
url=new URL("http://somesite/somefile.php"); 

//you need to encode ONLY the values of the parameters 
String param="param1=" + URLEncoder.encode("value1","UTF-8")+ 
"&param2="+URLEncoder.encode("value2","UTF-8")+ 
"&param3="+URLEncoder.encode("value3","UTF-8"); 

conn=(HttpURLConnection)loginUrl.openConnection(); 
//set the output to true, indicating you are outputting(uploading) POST data 
conn.setDoOutput(true); 
//once you set the output to true, you don't really need to set the request method to post, but I'm doing it anyway 
conn.setRequestMethod("POST"); 

//Android documentation suggested that you set the length of the data you are sending to the server, BUT 
// do NOT specify this length in the header by using conn.setRequestProperty("Content-Length", length); 
//use this instead. 
conn.setFixedLengthStreamingMode(param.getBytes().length); 
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
//send the POST out 
PrintWriter out = new PrintWriter(conn.getOutputStream()); 
out.print(param); 
out.close(); 

//build the string to store the response text from the server 
String response= ""; 

//start listening to the stream 
Scanner inStream = new Scanner(conn.getInputStream()); 

//process the stream and store it in StringBuilder 
while(inStream.hasNextLine()) 
response+=(inStream.nextLine()); 

} 
//catch some error 
catch(MalformedURLException ex){ 
Toast.makeText(MyActivity.this, ex.toString(), 1).show(); 

} 
// and some more 
catch(IOException ex){ 

Toast.makeText(MyActivity.this, ex.toString(), 1).show(); 
} 

を私はnavevalueペアを生成していて、それを文字列に変換していました。私はありませんでしたどこ また正しく

conn.setFixedLengthStreamingMode(param.getBytes().length); 

バイトの長さを送信しています。

関連する問題