2015-06-27 6 views
-2

Я хочу «перевести» этот запрос HTML запись в Android:HTTPS после запроса из HTML в Java

<form name="myForm" action="https://mysite.example" method="POST"> 
    <input type="hidden" name="Key1" value=1> 
    <input type="hidden" name="Key2" value="2"> 
    <input type="hidden" name="Key3" value="3"> 
</form> 

Пожалуйста, обратите внимание, что первое значение является целым числом, а не строка.

Так что я попытался использовать обнаруженный код на StackOverflow:

public String performPostCall(String requestURL, HashMap<String, String> postDataParams) { 
    URL url; 
    String response = ""; 
    try { 
     url = new URL(requestURL); 
     HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 
     conn.setReadTimeout(15000); 
     conn.setConnectTimeout(15000); 
     conn.setRequestMethod("POST"); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 

     OutputStream os = conn.getOutputStream(); 
     BufferedWriter writer = new BufferedWriter(
       new OutputStreamWriter(os, "UTF-8")); 
     writer.write(getPostDataString(postDataParams)); 

     writer.flush(); 
     writer.close(); 
     os.close(); 
     int responseCode=conn.getResponseCode(); 

     if (responseCode == HttpsURLConnection.HTTP_OK) { 
      String line; 
      BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); 
      while ((line=br.readLine()) != null) { 
       response+=line; 
      } 
     } 
     else { 
      response=""; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return response; 
} 

private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException { 
    StringBuilder result = new StringBuilder(); 
    boolean first = true; 
    for(Map.Entry<String, String> entry : params.entrySet()){ 
     if (first) 
      first = false; 
     else 
      result.append("&"); 

     result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
     result.append("="); 
     result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); 
    } 

    return result.toString(); 
} 

В моей AsyncTask я делаю:

HashMap<String, String> parameters = new HashMap<>(); 
String url = "https://mysite.example"; 
String result; 

parameters.put("Key1", "1"); 
parameters.put("Key2", "2"); 
parameters.put("Key3", "3"); 
result = performPostCall(url, parameters); 

Но это не работает. Что не так?

+2

Так что пошло не так? –

+0

вам нужно обнюхивать пакеты и посмотреть, что отличает их между каждой платформой, это способ ее перепроектировать. – Proxytype

+0

Роберт просто ответ равен "" .. – helloimyourmind

ответ

0

Я думаю, что вы пропускаете важную линию, которая делает фактическое соединение до вашего выходного потока

conn.connect(); 

вы должны также необходимо добавить разрешение в вашем AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/> 
+0

Очевидно, что я уже использовал разрешение. Я добавил conn.connect(), но все еще не работает. – helloimyourmind

+0

в коде, который вы не закрываете буферизованным читателем, без которого вы не можете получить ответ ..... потому что вы уже получаете 200 –

+0

Пожалуйста, обратитесь к этому http://stackoverflow.com/questions/9767952/how-to-add -parameters-to-httpurlconnection-using-post .... много голосов, которые я вижу, должно работать –

0

вы закрытие «писателя» до его обработки:

writer.flush(); 
writer.close(); 
os.close(); 

int responseCode = conn .getResponseCode();

+0

Не могли бы вы прояснить свой ответ? Я не вижу ничего плохого в этом блоке кода, за исключением того, что нет необходимости скрывать перед вызовом 'BufferedWriter.close()'. –