Also habe ich 2 Codes, die angeblich das gleiche tun. Die eine, die ich auf Android verwende, gibt jedoch die falschen HTML-Daten zurück. Der Bestand Java gibt die korrekten Daten nach dem Senden der Anfrage zurück. Ich habe beide Codes hier. Können Sie mir sagen (auch wenn ich INTERNET-ERLAUBNIS ANDROID bekam), warum das Android-Gerät nicht funktioniert, während das Java-Gerät funktioniert? Dies ist der Android-Code:Android HTTP Post Request funktioniert nicht, aber Lager Java tut?
EDIT: Ich fand den Fix. Wenn Sie eine StringEntity verwenden, um eine solche Zeichenfolge an den Server zu senden, müssen Sie den Inhalt auf application/x-www-form-urlencoded setzen. Ich habe meinen Code bearbeitet, dies zu zeigen:
public static String sendNamePostRequest(String urlString) {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(urlString);
StringBuffer sb = new StringBuffer();
try {
StringEntity se = new StringEntity(
"__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE3NDM5MzMwMzRkZA%3D%3D&__EVENTVALIDATION=%2FwEWBAL%2B%2B4CfBgK52%2BLYCQK1gpH7BAL0w%2FPHAQ%3D%3D&_nameTextBox=John&_zoekButton=Zoek&numberOfLettersField=3");
se.setContent("application/x-www-form-urlencoded");
post.setEntity();
HttpResponse response = client.execute(post);
HttpEntity entity = response.getEntity();
BufferedReader br = new BufferedReader(new InputStreamReader(
entity.getContent()));
String in = "";
while ((in = br.readLine()) != null) {
sb.append(in + "\n");
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
Dies ist die Aktie von Java-Code:
public String sendNamePostRequest(String urlString) {
StringBuffer sb = null;
try {
String data = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTE3NDM5MzMwMzRkZA%3D%3D&__EVENTVALIDATION=%2FwEWBAL%2B%2B4CfBgK52%2BLYCQK1gpH7BAL0w%2FPHAQ%3D%3D&_nameTextBox=John&_zoekButton=Zoek&numberOfLettersField=3";
// String data = "";
URL requestUrl = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) requestUrl
.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(data);
dos.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String in = "";
sb = new StringBuffer();
while ((in = br.readLine()) != null) {
sb.append(in + "\n");
}
dos.close();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
angeben, was meinst du mit „falschen HTML-Daten“ – 207
Es bedeutet, dass ich sollte die HTML-Daten der Seite zurück bekommen, nachdem es hat die Anfrage bearbeitet. Der Java-Quellcode macht das perfekt, aber der Android-Code gibt nur die HTML-Seite der Site zurück, ohne die POST-Anfrage zu berücksichtigen. Wireshark sieht zwar einen POST sowohl von der Android- als auch von der Stock-Seite, mit dem exakt gleichen Datenstring, aber aus irgendeinem Grund wird der von Java gesendete nicht verarbeitet ... – ZimZim
Im Android-Fall müssen Sie das wahrscheinlich sagen StringEntity zum Festlegen des Inhaltstyps auf application/x-www-form-urlencoded – superfell