热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Http与HttpClient(已被废弃)通信的介绍,附带一个Http发送GET请求工具类的例子

阅读时如有疑问和错误欢迎评论提出或者加我企鹅1262135886,谢谢支持所谓通信便有发送和接受两种形式,在代码的表现则是POST和GET以下的URL是笔者随写的,读者根据实际开发进行修

阅读时如有疑问和错误欢迎评论提出或者加我企鹅1262135886 ,谢谢支持

所谓通信便有发送和接受两种形式,在代码的表现则是POST和GET

以下的URL是笔者随写的,读者根据实际开发进行修改,仅供参考!

             *Http的GET请求,得到数据*

第一种方式,开启线程请求数据

package com.example.getposthttp;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.client.methods.HttpUriRequest;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts.Data;
import android.view.View;
import android.view.View.OnClickListener;

public class GetDemo extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_read).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
sendRequestWithHttpURLConnection();
}
});
}

private void sendRequestWithHttpURLConnection() {
// 开启线程来发起网络请求
new Thread(new Runnable() {

@Override
public void run() {
/**
* HttpURLConnection代表应用程序和 URL 之间的通信链接。 此类的实例可用于读取和写入此 URL
* 引用的资源
*/

HttpURLConnection cOnnection= null;
try {
URL url = new URL("http://www.baidu.com");
// 表示到 URL 所引用的远程对象的连接
cOnnection= (HttpURLConnection) url.openConnection();
// GET从服务器获取数据
connection.setRequestMethod("GET");
// 设置一个指定的超时值(以毫秒为单位),该值将在打开到此 URLConnection
// 引用的资源的通信链接时使用。
connection.setConnectTimeout(8000);
// 返回读入超时设置
connection.setReadTimeout(8000);
// 得到输入流对象
InputStream in = connection.getInputStream();
// 下面对获取到的输入流进行读取
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
StringBuilder respOne= new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
respone.append(line);
}
System.out.println(respone.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
}

第二种方式,使用异步请求数据

  package com.example.getposthttp;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.client.methods.HttpUriRequest;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts.Data;
import android.view.View;
import android.view.View.OnClickListener;

public class GetDemo extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_read).setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new AsyncTask() {

@Override
protected Void doInBackground(String... params) {
try {
URL url = new URL(params[0]);

try {
URLConnection cOnnection= url
.openConnection();

InputStream is = connection
.getInputStream();

InputStreamReader isr = new InputStreamReader(
is, "uft-8");

BufferedReader br = new BufferedReader(
isr);

String line;

while ((line = br.readLine()) != null) {
System.out.println(line);

}
br.close();
isr.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}.execute("http://fanyi.youdao.com/openapi.do?keyfrom=YouDaoXY&key=659600044&type=data&doctype=json&version=1.1&q=good");
}
});
}
}
                   *Http的Post请求,发送数据*

第一种方式:开启线程

package com.example.getposthttp;

import java.io.DataOutputStream;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.client.methods.HttpUriRequest;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.ContactsContract.Contacts.Data;
import android.view.View;
import android.view.View.OnClickListener;

public class GetDemo extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_read).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
sendRequestWithHttpURLConnection();
}
});
}

private void sendRequestWithHttpURLConnection()
{
//开启线程来发起网络请求
new Thread(new Runnable() {

@Override
public void run() {
/**
* HttpURLConnection代表应用程序和 URL 之间的通信链接。
* 此类的实例可用于读取和写入此 URL 引用的资源
*/

HttpURLConnection cOnnection=null;
try {
URL url=new URL("http://www.baidu.com");
//表示到 URL 所引用的远程对象的连接
cOnnection=(HttpURLConnection) url.openConnection();
//POST提交数据给服务器
connection.setRequestMethod("POST");
//得到输出流
DataOutputStream out=new DataOutputStream(connection.getOutputStream());
//发送数据
out.writeBytes("");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
}

第二种方式:使用异步

package com.example.getposthttp;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;

public class PostDemo extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_read).setOnClickListener(
new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new AsyncTask() {

@Override
protected Void doInBackground(String... params) {
try {
URL url = new URL(params[0]);

try {
HttpURLConnection cOnnection= (HttpURLConnection) url
.openConnection();
connection.setRequestMethod("POST");
// 将此 URLConnection 的 doInput 字段的值设置为指定的值
connection.setDoInput(true);
// 将此 URLConnection 的 doOutput 字段的值设置为指定的值。
connection.setDoOutput(true);
//得到输出流
OutputStreamWriter osw=new OutputStreamWriter(connection.getOutputStream());

BufferedWriter bw=new BufferedWriter(osw);

bw.write("?keyfrom=YouDaoXY&key=659600044&type=data&doctype=json&version=1.1&q=good");

bw.flush();

InputStream is = connection
.getInputStream();

InputStreamReader isr = new InputStreamReader(
is, "uft-8");

BufferedReader br = new BufferedReader(
isr);

String line;

while ((line = br.readLine()) != null) {
System.out.println(line);

}
br.close();
isr.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}.execute("http://fanyi.youdao.com/openapi.do");
}
});
}
}
                HttpClient的GET请求
public void sendRequestWithHttpClient()
{
new Thread(new Runnable() {

@Override
public void run() {
try {
//获取HttpClient实例,HttpClient是一个接口
HttpClient httpClient=new DefaultHttpClient();
//HttpGet表示发送get请求
HttpGet httpGet=new HttpGet("http://www.baidu.com");
//发送Get请求
HttpResponse httpRespOnse=httpClient.execute(httpGet);
//如果状态码=200
if (httpResponse.getStatusLine().getStatusCode()==200) {
//请求和响应都成功了,得到请求实体数据
HttpResponse entity=(HttpResponse) httpResponse.getEntity();
//转换成String类型
String respOnes=EntityUtils.toString((HttpEntity) entity,"UTF-8");
text.setText(respones);
}
} catch (Exception e) {
// TODO: handle exception
}
}
});
}
                  *HttpClient的Post请求*     
private void ReceiverResponeWithHttpClient()
{
new Thread(new Runnable() {

@Override
public void run() {
try {
//获取HttpClient实例,HttpClient是一个接口
HttpClient httpClient=new DefaultHttpClient();
//HttpGPost表示发送Post请求
HttpPost httpPost=new HttpPost("http://www.baidu.com");
//NameValuePair将某一名称与一个属性为 IDL struct 的值关联,并在 DynStruct API 中使用。
//简单点的意思就是键值对的意思,前面是键,后面是值
List params=new ArrayList();
//以键值对的形式添加
params.add(new BasicNameValuePair("username", "adaim"));
params.add(new BasicNameValuePair("password", "123456"));
//UrlEncodedFormEntity这个类是用来把输入的数据编码成合适的数据
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(params,"uft-8");
httpPost.setEntity(entity);
HttpResponse httpRespOnse=httpClient.execute(httpPost);


} catch (Exception e) {
// TODO: handle exception
}
}
});
}

到这里Http与HttpClient已经介绍完了

由于一个项目可能很多地方会用到GET和POST请求,我们不可能每次都去重复写一次,所以我们一般会去写个工具类,下面是我写的一个Http发送GET请求工具类的例子,希望读者能够举一反三,下面用到了回调机制,回调机制的用法及其作用读者可以自行研究一下,这里就不介绍了。

首先定义一个回调接口

package com.example.getposthttp;

public interface HttpCallBackListener {

void onFinish(String respones);
void onError(Exception e);
}
package com.example.getposthttp;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


/**
* 回调机制
* @author Administrator
*
*/

public class HttpUtil {

private static void sendRequestWithHttpURLConnection(final String address,
final HttpCallBackListener listener) {
// 开启线程来发起网络请求
new Thread(new Runnable() {

@Override
public void run() {
HttpURLConnection cOnnection= null;
try {
URL url = new URL(address);
cOnnection= (HttpURLConnection) url.openConnection();

// GET从服务器获取数据
connection.setRequestMethod("GET");
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
connection.setDoInput(true);
connection.setDoOutput(true);
InputStream in = connection.getInputStream();
// 下面对获取到的输入流进行读取
BufferedReader reader = new BufferedReader(
new InputStreamReader(in));
StringBuilder respOne= new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
respone.append(line);
}
if (listener!=null) {
//回调onFinish方法
listener.onFinish(respone.toString());
}
} catch (Exception e) {
if (listener!=null) {
//回调onError方法
listener.onError(e);
}
}finally{
if (connection!=null) {
connection.disconnect();
}
}
}
}).start();
}
}
                *谢谢观看,欢迎转载*

推荐阅读
  • HttpClient请求https的实例:packagetrain;importjava.io.IOException;importjava.security.NoSuchAlg ... [详细]
  • Eclipse利用HttpClient 写post和get连接到后台
    文件目录如下:第一个包代码如下:packagecn.itcast.login;importcn.itcast.login.service.DataService;importandroid.ap ... [详细]
  • packagecom.example.uptoserverdemo;importjava.io.File;importjava.io.IOException;importorg.ap ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本篇文章给大家分享的是有关如何正确的使用HttpClient方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不 ... [详细]
  • 如何使用.NET CORE HttpClient
    小编这次要给大家分享的是如何使用.NETCOREHttpClient,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。前 ... [详细]
  • 本文提供了一个Android应用中用于抓取网页信息并下载图片的示例代码。通过该代码,开发者可以轻松实现从指定URL获取网页内容及其中的图片资源。 ... [详细]
  • 使用EF Core在.Net Core控制台应用中操作SQLite数据库
    本文介绍如何利用Visual Studio 2019和Windows 10环境,通过Entity Framework Core(EF Core)实现对SQLite数据库的读写操作。项目源代码可从百度网盘下载。 ... [详细]
  • 微信小程序支付官方参数小程序中代码后端发起支付代码支付回调官方参数文档地址:https:developers.weixin.qq.comminiprogramdeva ... [详细]
  • 本文探讨了Web API 2中特性的路由机制,特别是如何利用它来构建RESTful风格的URI。文章不仅介绍了基本的特性路由使用方法,还详细说明了如何通过特性路由进行API版本控制、HTTP方法的指定、路由前缀的应用以及路由约束的设置。 ... [详细]
  • 最近手上在进行一个性能测试项目,脚本是java语言使用httpClient实现http请求。并发用户数线程只有40个,但是服务器端启动的线程出现了400多个,是哪里平白无故出现这么多线程呢?肯定是有问 ... [详细]
  • AComparisonofjava.net.URLConnectionandHTTPClientSincejava.net.URLConnectionandHTTPClienthav ... [详细]
  • 请先查看上一篇文章HttpClient配置,之后在进行。使用this.myhttp.get(http:192.168.2.139:9002apipatients)方法,读取webapi。因 ... [详细]
  • 当使用C++做HTTP客户端时,目前通用的做法就是使用libcurl。其官方网站的地址是http:curl.haxx.se,该网站主要提供了Curl和libcurl。Curl是命令 ... [详细]
author-avatar
橙色kop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有