Android - HTTP-GET-Anfrage
Entwickelt ich eine HTTP-GET-Methode, die eindeutig funktioniert.
public class GetMethodEx {
public String getInternetData() throws Exception{
new TrustAllManager();
new TrustAllSSLSocketFactory();
BufferedReader in = null;
String data = null;
try
{
HttpClient client = new DefaultHttpClient();
URI website = new URI("https://server.com:8443/Timesheets/ping");
HttpGet request = new HttpGet();
request.setURI(website);
HttpResponse response = client.execute(request);
response.getStatusLine().getStatusCode();
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String l = "";
String nl = System.getProperty("line.separator");
while ((l = in.readLine()) !=null){
sb.append(l + nl);
}
in.close();
data = sb.toString();
return data;
} finally{
if (in != null){
try{
in.close();
return data;
}catch (Exception e){
e.printStackTrace();
}
}
}
}
Hier ist ein print screen von meinen emulator beim abrufen einer Antwort von www.google.com
SCREEN SHOT VON GOOGLE.COM ARBEITEN
Folgende code ist meine retrieval-Methode, um anzeigen auf dem Bildschirm.
public class Home extends Activity {
TextView httpStuff;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.httpexample);
httpStuff = (TextView) findViewById(R.id.tvhttp);
new LongOperation().execute("");
}
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
GetMethodEx test = new GetMethodEx();
String returned = null;
try {
returned = test.getInternetData();
} catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return returned;
}
@Override
protected void onPostExecute(String result) {
httpStuff.setText(result);
}
Jedoch, wenn ich versuche es mit meinem eigenen server.
"https://server:port/xwtimesheets/ping"
Habe ich den folgenden Bildschirm
MEIN SERVER FUNKTIONIERT NICHT
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine bearbeitete version Ihres GetMethodEx Klasse. MySSLSocketFactory ermöglicht Ihnen die Verbindung beliebiger server ohne Prüfung Ihr Zertifikat. Wie Sie wissen, ist dies nicht sicher. Ich empfehle Ihnen, fügen Sie Ihre Server Zertifikat als vertrauenswürdig zu Ihrem Gerät.
Durch die Art, wie Sie Ihre Server-Zertifikat Gültigkeitsdatum abgelaufen ist. Selbst wenn Sie fügen Sie es als vertrauenswürdig gilt, können Sie möglicherweise nicht mit Ihrem server verbinden.
Haben Sie einen Fehler hier:
Sind Sie mit "https://" doppelt.
EDIT:
Ich habe den code aus hier
Ihr code sollte wie folgt Aussehen:
Ich habe nicht testen Sie es auf mein Ende, aber es sollte funktionieren. Beachten Sie die port 8433 statt 433, also änderte ich es in der socketfactory Schema.
Kümmern, mit der neuen version der API-code ist veraltet !
Hier ist ein Beispiel für http get mit der neuen api.
Quelle aus dem android-website : https://developer.android.com/training/volley/simple.html
HttpClient
ist veraltet. So neue Art und Weise zu tun:Zunächst fügen Sie die beiden Abhängigkeiten in den build.gradle:
Dann schreiben Sie diesen code in
ASyncTask
imdoBackground
Methode.Hinweis: vergessen Sie nicht, die Ausnahmen zu behandeln, die im code .