我处处搜索但我找不到答案,有没有办法发出简单的HTTP请求? 我想在个人某个网站上请求PHP页面/脚本,但我不想显示该网页。 html
若是可能的话我甚至想在后台(在BroadcastReceiver中)这样作 java
我使用Gson lib为web服务建立了这个URL: android
客户: git
public EstabelecimentoList getListaEstabelecimentoPorPromocao(){ EstabelecimentoList estabelecimentoList = new EstabelecimentoList(); try{ URL url = new URL("http://" + Conexao.getSERVIDOR()+ "/cardapio.online/rest/recursos/busca_estabelecimento_promocao_android"); HttpURLConnection con = (HttpURLConnection) url.openConnection(); if (con.getResponseCode() != 200) { throw new RuntimeException("HTTP error code : "+ con.getResponseCode()); } BufferedReader br = new BufferedReader(new InputStreamReader((con.getInputStream()))); estabelecimentoList = new Gson().fromJson(br, EstabelecimentoList.class); con.disconnect(); } catch (IOException e) { e.printStackTrace(); } return estabelecimentoList; }
private String getToServer(String service) throws IOException { HttpGet httpget = new HttpGet(service); ResponseHandler<String> responseHandler = new BasicResponseHandler(); return new DefaultHttpClient().execute(httpget, responseHandler); }
问候 github
注意:如今不推荐使用与Android捆绑在一块儿的Apache HTTP Client,而使用HttpURLConnection 。 有关详细信息,请参阅Android开发人员博客 。 web
将<uses-permission android:name="android.permission.INTERNET" />
到清单中。 api
而后,您将检索以下所示的网页: 网络
URL url = new URL("http://www.android.com/"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); try { InputStream in = new BufferedInputStream(urlConnection.getInputStream()); readStream(in); } finally { urlConnection.disconnect(); }
我还建议在一个单独的线程上运行它: ide
class RequestTask extends AsyncTask<String, String, String>{ @Override protected String doInBackground(String... uri) { String responseString = null; try { URL url = new URL(myurl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); if(conn.getResponseCode() == HttpsURLConnection.HTTP_OK){ // Do normal input or output stream reading } else { response = "FAILED"; // See documentation for more info on response handling } } catch (ClientProtocolException e) { //TODO Handle problems.. } catch (IOException e) { //TODO Handle problems.. } return responseString; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); //Do anything with response.. } }
有关响应处理和POST请求的详细信息,请参阅文档 。 网站
有一个线程:
private class LoadingThread extends Thread { Handler handler; LoadingThread(Handler h) { handler = h; } @Override public void run() { Message m = handler.obtainMessage(); try { BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); String page = ""; String inLine; while ((inLine = in.readLine()) != null) { page += inLine; } in.close(); Bundle b = new Bundle(); b.putString("result", page); m.setData(b); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } handler.sendMessage(m); } }
这是一个很是古老的答案。 我绝对不会再推荐Apache的客户了。 而是使用:
首先,请求访问网络的权限,在清单中添加如下内容:
<uses-permission android:name="android.permission.INTERNET" />
那么最简单的方法是使用与Android捆绑的Apache http客户端:
HttpClient httpclient = new DefaultHttpClient(); HttpResponse response = httpclient.execute(new HttpGet(URL)); StatusLine statusLine = response.getStatusLine(); if(statusLine.getStatusCode() == HttpStatus.SC_OK){ ByteArrayOutputStream out = new ByteArrayOutputStream(); response.getEntity().writeTo(out); String responseString = out.toString(); out.close(); //..more logic } else{ //Closes the connection. response.getEntity().getContent().close(); throw new IOException(statusLine.getReasonPhrase()); }
若是你想让它在单独的线程上运行,我建议扩展AsyncTask:
class RequestTask extends AsyncTask<String, String, String>{ @Override protected String doInBackground(String... uri) { HttpClient httpclient = new DefaultHttpClient(); HttpResponse response; String responseString = null; try { response = httpclient.execute(new HttpGet(uri[0])); StatusLine statusLine = response.getStatusLine(); if(statusLine.getStatusCode() == HttpStatus.SC_OK){ ByteArrayOutputStream out = new ByteArrayOutputStream(); response.getEntity().writeTo(out); responseString = out.toString(); out.close(); } else{ //Closes the connection. response.getEntity().getContent().close(); throw new IOException(statusLine.getReasonPhrase()); } } catch (ClientProtocolException e) { //TODO Handle problems.. } catch (IOException e) { //TODO Handle problems.. } return responseString; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); //Do anything with response.. } }
而后您能够经过如下方式提出请求:
new RequestTask().execute("http://stackoverflow.com");