使用HTTP协议访问网络
来源:互联网 发布:解压缩软件下载 编辑:程序博客网 时间:2024/05/21 10:29
1 HttpURLConnection
2 HttpClient
HttpURLConnection使用过程:
1 获取HttpURLConnection的实例:
URL url = new URL(“http://www.baidu.com”);
HttpURLConnection connection = (HttpURLConnection)url.openConnection;
2 设置请求的方法:GET POST 获取/提交
connection.setRequsestMethod(“get”);
3 自由设置
connection.setConnectionTimeout(8000);
connection.setReadTimeout(8000);
4 获取服务器返回的输入流
InputStream in = connection.getInputStream();
5 最后调用connection.disconnect();
实例:get
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/send_request" android:text="Send Request"/> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/response_text"/> </ScrollView></LinearLayout>
package com.example.networktest;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;public class MainActivity extends AppCompatActivity implements View.OnClickListener { public static final int SHOW_RESPONSE = 0; private Button sendRquest; private TextView responseText; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what) { case SHOW_RESPONSE: String response = (String) msg.obj; //进行UI操作 responseText.setText(response); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sendRquest = (Button) findViewById(R.id.send_request); responseText = (TextView) findViewById(R.id.response_text); sendRquest.setOnClickListener(this); } @Override public void onClick(View v) { if(v.getId() == R.id.send_request){ sendRequestWithHttpURLConnection(); } } private void sendRequestWithHttpURLConnection(){ //开启线程 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { URL url = new URL("http://www.baidu.com"); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader((new InputStreamReader(in))); StringBuilder response = new StringBuilder(); String line ; while ((line = reader.readLine())!= null){ response.append(line); } Message message = new Message() ; message.what = SHOW_RESPONSE ; message.obj = response.toString(); handler.sendMessage(message); }catch (Exception e){ e.printStackTrace(); }finally { if (connection!=null){ connection.disconnect(); } } } }).start(); }}
<uses-permission android:name="android.permission.INTERNET"/>
post
public static String loginOfPost(String username, String password) { HttpURLConnection conn = null; try { // 创建一个URL对象 URL mURL = new URL("http://192.168.0.100:8080/android/servlet/LoginServlet"); // 调用URL的openConnection()方法,获取HttpURLConnection对象 conn = (HttpURLConnection) mURL.openConnection(); conn.setRequestMethod("POST");// 设置请求方法为post conn.setReadTimeout(5000);// 设置读取超时为5秒 conn.setConnectTimeout(10000);// 设置连接网络超时为10秒 conn.setDoOutput(true);// 设置此方法,允许向服务器输出内容 // post请求的参数 String data = "username=" + username + "&password=" + password; // 获得一个输出流,向服务器写数据,默认情况下,系统不允许向服务器输出内容 OutputStream out = conn.getOutputStream();// 获得一个输出流,向服务器写数据 out.write(data.getBytes()); out.flush(); // 刷新对象输出流,将任何字节都写入潜在的流中 out.close(); int responseCode = conn.getResponseCode();// 调用此方法就不必再使用conn.connect()方法 if (responseCode == 200) { InputStream is = conn.getInputStream(); String state = getStringFromInputStream(is); return state; } else { Log.i(TAG, "访问失败" + responseCode); } } catch (Exception e) { e.printStackTrace(); } finally { if (conn != null) { conn.disconnect();// 关闭连接 } } return null; }
2 使用HttpClient (在Android 6.0(API 23) 中,Google已经移除了Apache HttpClient 想关类,推荐使用HttpUrlConnection,如果要继续使用,在Android studio对应的module下的build.gradle文件中加入:
android {
useLibrary ‘org.apache.http.legacy’
})
package com.example.networktest;import android.net.Uri;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.google.android.gms.appindexing.Action;import com.google.android.gms.appindexing.AppIndex;import com.google.android.gms.common.api.GoogleApiClient;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;public class MainActivity extends AppCompatActivity implements View.OnClickListener { public static final int SHOW_RESPONSE = 0; private Button sendRquest; private TextView responseText; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case SHOW_RESPONSE: String response = (String) msg.obj; //进行UI操作 responseText.setText(response); } } }; /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ private GoogleApiClient client; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sendRquest = (Button) findViewById(R.id.send_request); responseText = (TextView) findViewById(R.id.response_text); sendRquest.setOnClickListener(this); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); } @Override public void onClick(View v) { if (v.getId() == R.id.send_request) { // sendRequestWithHttpURLConnection(); sendRequestWithHttpClient(); } } private void sendRequestWithHttpURLConnection() { //开启线程 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { URL url = new URL("http://www.baidu.com"); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(8000); connection.setReadTimeout(8000); InputStream in = connection.getInputStream(); BufferedReader reader = new BufferedReader((new InputStreamReader(in))); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } Message message = new Message(); message.what = SHOW_RESPONSE; message.obj = response.toString(); handler.sendMessage(message); } catch (Exception e) { e.printStackTrace(); } finally { if (connection != null) { connection.disconnect(); } } } }).start(); } private void sendRequestWithHttpClient() { new Thread(new Runnable() { @Override public void run() { try { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("http://www.baidu.com"); HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200){ HttpEntity entity =httpResponse.getEntity(); String response = EntityUtils.toString(entity,"utf-8"); Message message = new Message(); message.what = SHOW_RESPONSE ; message.obj = response.toString(); handler.sendMessage(message); } } catch (Exception e) { e.printStackTrace(); } } }).start(); } @Override public void onStart() { super.onStart(); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client.connect(); Action viewAction = Action.newAction( Action.TYPE_VIEW, // TODO: choose an action type. "Main Page", // TODO: Define a title for the content shown. // TODO: If you have web page content that matches this app activity's content, // make sure this auto-generated web page URL is correct. // Otherwise, set the URL to null. Uri.parse("http://host/path"), // TODO: Make sure this auto-generated app URL is correct. Uri.parse("android-app://com.example.networktest/http/host/path") ); AppIndex.AppIndexApi.start(client, viewAction); } @Override public void onStop() { super.onStop(); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. Action viewAction = Action.newAction( Action.TYPE_VIEW, // TODO: choose an action type. "Main Page", // TODO: Define a title for the content shown. // TODO: If you have web page content that matches this app activity's content, // make sure this auto-generated web page URL is correct. // Otherwise, set the URL to null. Uri.parse("http://host/path"), // TODO: Make sure this auto-generated app URL is correct. Uri.parse("android-app://com.example.networktest/http/host/path") ); AppIndex.AppIndexApi.end(client, viewAction); client.disconnect(); }}
0 0
- 使用HTTP协议访问网络
- 使用HTTP协议访问网络
- 使用HTTP协议访问网络
- 使用HTTP协议访问网络
- 使用Http协议访问网络
- 使用http协议访问网络
- 使用HTTP协议访问网络
- 使用 HTTP协议访问网络
- Android学习使用HTTP协议访问网络
- Android之使用HTTP协议访问网络
- Android使用HTTP协议访问网络
- Android使用Http协议访问网络
- 怎样使用HTTP协议访问网络
- Android使用Http协议访问网络
- Android入门-使用Http协议访问网络
- 使用Http协议访问网络--HttpURLConnection
- 使用Http协议访问网络--HttpClient
- Android之使用HTTP协议访问网络
- yii的relations方法的使用
- spinner 下拉列表
- 主函数main(argc,**argv)中两个参数的用法
- [Android] UI 的更新及其线程模型
- UVA 11134 Fabled Rocks(贪心)
- 使用HTTP协议访问网络
- Oracle数据库(Oracle存储结构、Oracle运行机制、日期相关的函数、序列、大对象数据类型、表的修改与约束、事务)
- 常用的shell脚本
- 类打开浏览器
- 水晶报表中几种交叉表的实现方法
- UCOS-II简单总览
- Spring View 解析渲染
- 理解(*(void(*)())0)();
- 几种单片机相关的编译器预定义宏