如何使用httpclient4.5.1使用

& Android学习指南之三十:使用URLConnection和HttpClient访问网络的方法
Android学习指南之三十:使用URLConnection和HttpClient访问网络的方法
&&&&&& 上一节讲了的方法,而除这种方法之外,我们还可以使用代码的方式访问网络,代码方式在很多时候用起来更灵活。本节要讲的就是使用URLConnection对象和HttpClient组件访问网络的方法。&&&&&& 实际上URLConnection和HttpClient访问网络的方法和 Web开发中的使用方式几乎没什么区别,而Java Web开发的资料比较多,大家可以在学完本节后去查阅相关资料,深入研究下HttpClient4.0的内容,以学习更多更深的知识。&&&&&& 分别使用URLConnection和HttpClient访问Google天气服务的例子&&&&&&&这个例子的的目的就是从Google哪里获取郑州的天气预报信息,并显示在中,本讲只会把返回的数据显示出来,下一讲我们学XML解析的时候再把这个天气预报做成图文并茂的形式,所以大家先暂时忍耐一下丑陋的界面。&&&&&& 1、新建一个项目 Lesson30_HttpClient ,主的文件名是 MainActivity.java。&&&&&& 2、res/layout/main.xml的内容如下:
&version=&1.0&&encoding=&utf-8&&&
&xmlns:android=&/apk/res/android&&android:layout_height=&fill_parent&&android:layout_width=&fill_parent&&android:orientation=&vertical&&&
&android:layout_height=&wrap_content&&android:layout_width=&fill_parent&&android:text=&网络连接测试&&android:id=&@+id/TextView01&&&&
&type=submit&android:layout_height=&wrap_content&&android:layout_width=&wrap_content&&android:text=&使用URLConnection访问GoogleWeatherAPI&&android:id=&@+id/Button01&&&
&type=submit&android:layout_height=&wrap_content&&android:layout_width=&wrap_content&&android:text=&使用HttpClient访问GoogleWeatherAPI&&android:id=&@+id/Button02&&&
&android:layout_height=&wrap_content&&android:layout_width=&wrap_content&&android:id=&@+id/ScrollView01&&&
&&&&&android:layout_height=&wrap_content&&android:layout_width=&wrap_content&&android:id=&@+id/TextView02&&&
&&&&&&&& 3、MainActivity.java的内容如下:
package&android.basic.lesson30; &&
import&java.io.InputStreamR &&
import&java.net.HttpURLC &&
import&java.net.URL; &&
import&org.apache.http.client.ResponseH &&
import&org.apache.http.client.methods.HttpG &&
import&org.apache.http.impl.client.BasicResponseH &&
import&org.apache.http.impl.client.DefaultHttpC &&
import&android.app.A &&
import&android.os.B &&
import&android.view.V &&
import&android.widget.B &&
import&android.widget.TextV &&
import&android.widget.T &&
public&class&MainActivity&extends&Activity&{ &&
&&&&TextView& &&
&&&&String&googleWeatherUrl1&=&&/ig/api?weather=zhengzhou&; &&
&&&&String&googleWeatherUrl2&=&&/ig/api?hl=zh-cn&weather=zhengzhou&; &&
&&&&@Override&&
&&&&public&void&onCreate(Bundle&savedInstanceState)&{ &&
&&&&&&&&super.onCreate(savedInstanceState); &&
&&&&&&&&setContentView(R.layout.main); &&
&&&&&&&&&&
&&&&&&&&Button&b1&=&(Button)&findViewById(R.id.Button01); &&
&&&&&&&&Button&b2&=&(Button)&findViewById(R.id.Button02); &&
&&&&&&&&tv&=&(TextView)&findViewById(R.id.TextView02); &&
&&&&&&&&&&
&&&&&&&&b1.setOnClickListener(new&View.OnClickListener()&{ &&
&&&&&&&&&&&&@Override&&
&&&&&&&&&&&&public&void&onClick(View&v)&{ &&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&urlConn(); &&
&&&&&&&&&&&&} &&
&&&&&&&&}); &&
&&&&&&&&&&
&&&&&&&&b2.setOnClickListener(new&View.OnClickListener()&{ &&
&&&&&&&&&&&&@Override&&
&&&&&&&&&&&&public&void&onClick(View&v)&{ &&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&httpClientConn(); &&
&&&&&&&&&&&&} &&
&&&&&&&&}); &&
&&&&protected&void&urlConn()&{ &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&URL&url&=&new&URL(googleWeatherUrl1); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&HttpURLConnection&httpconn&=&(HttpURLConnection)&url.openConnection(); &&
&&&&&&&&&&&&if&(httpconn.getResponseCode()&==&HttpURLConnection.HTTP_OK)&{ &&
&&&&&&&&&&&&&&&&Toast.makeText(getApplicationContext(),&&连接Google&Weather&API成功!&, &&
&&&&&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_SHORT).show(); &&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&InputStreamReader&isr&=&new&InputStreamReader(httpconn.getInputStream(),&&utf-8&); &&
&&&&&&&&&&&&&&&&int&i; &&
&&&&&&&&&&&&&&&&String&content&=&&&; &&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&while&((i&=&isr.read())&!=&-1)&{ &&
&&&&&&&&&&&&&&&&&&&&content&=&content&+&(char)&i; &&
&&&&&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&&&isr.close(); &&
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&tv.setText(content); &&
&&&&&&&&&&&&} &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&httpconn.disconnect(); &&
&&&&&&&&}&catch&(Exception&e)&{ &&
&&&&&&&&&&&&Toast.makeText(getApplicationContext(),&&连接Google&Weather&API失败&,&Toast.LENGTH_SHORT) &&
&&&&&&&&&&&&&&&&&&&&.show(); &&
&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&} &&
&&&&protected&void&httpClientConn()&{ &&
&&&&&&&&&&
&&&&&&&&DefaultHttpClient&httpclient&=&new&DefaultHttpClient(); &&
&&&&&&&&&&
&&&&&&&&HttpGet&httpget&=&new&HttpGet(googleWeatherUrl2); &&
&&&&&&&&&&
&&&&&&&&ResponseHandler&STRING&&responseHandler&=&new&BasicResponseHandler(); &&
&&&&&&&&try&{ &&
&&&&&&&&&&&&String&content&=&httpclient.execute(httpget,&responseHandler); &&
&&&&&&&&&&&&Toast.makeText(getApplicationContext(),&&连接Google&Weather&API成功!&, &&
&&&&&&&&&&&&&&&&&&&&Toast.LENGTH_SHORT).show(); &&
&&&&&&&&&&&&&&
&&&&&&&&&&&&tv.setText(content); &&
&&&&&&&&}&catch&(Exception&e)&{ &&
&&&&&&&&&&&&Toast.makeText(getApplicationContext(),&&连接Google&Weather&API失败&,&Toast.LENGTH_SHORT) &&
&&&&&&&&&&&&.show(); &&
&&&&&&&&&&&&e.printStackTrace(); &&
&&&&&&&&} &&
&&&&&&&&httpclient.getConnectionManager().shutdown(); &&
}&/STRING&&&&&&&&& 4、最后别忘了在AndroidManifest.xml中加入访问网络的权限:
&android:name=&android.permission.INTERNET&&&&&&&&& 5、运行程序查看结果:&&&&&& 按第一个按钮的效果,返回的数据结果显示在了TextView里:&&&&&& 按第二个按钮的效果,返回的数据结果显示在了TextView里, 所不同的是显示的是中文。&&&&&& 本节就讲到这里了,相信大家对URLConnection和HttpClient访问网络的知识有了初步了解。
本文发布:
本文地址:
发布:鸡啄米
没想到都写了30多篇这个了~
博主好技术,我也做过一个安卓的holleword呢。鸡啄米 于
00:05:13 回复hello world是学习各种编程技术的必经之路啊
需要很扎实的功底才能写出来吧!
这里是个编程高手啊。呵呵鸡啄米 于
00:05:41 回复不敢当,呵呵
怎么访问不了啊,是哪里出错了,网络访问权限给了
不行啊,一直显示连接失败,什么情况啊?本人小白
完全随机文章<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&301601人阅读
java(91)
项目经验(58)
Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会更加深入。
HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。
1. 基于标准、纯净的java语言。实现了Http1.0和Http1.1
2. 以可扩展的面向对象的结构实现了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
3. 支持HTTPS协议。
4. 通过Http代理建立透明的连接。
5. 利用CONNECT方法通过Http代理建立隧道的https连接。
6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证方案。
7. 插件式的自定义认证方案。
8. 便携可靠的套接字工厂使它更容易的使用第三方解决方案。
9. 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。
10. 自动处理Set-Cookie中的Cookie。
11. 插件式的自定义Cookie策略。
12. Request的输出流可以避免流中内容直接缓冲到socket服务器。
13. Response的输入流可以有效的从socket服务器直接读取相应内容。
14. 在http1.0和http1.1中利用KeepAlive保持持久连接。
15. 直接获取服务器发送的response code和 headers。
16. 设置连接超时的能力。
17. 实验性的支持http1.1 response caching。
18. 源代码基于Apache License 可免费获取。
三、使用方法
使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。
1.&创建HttpClient对象。
2.&创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3.&如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
4.&调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。
5.&调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6.&释放连接。无论执行方法是否成功,都必须释放连接
package com.
import java.io.F
import java.io.FileInputS
import java.io.IOE
import java.io.UnsupportedEncodingE
import java.security.KeyManagementE
import java.security.KeyS
import java.security.KeyStoreE
import java.security.NoSuchAlgorithmE
import java.security.cert.CertificateE
import java.util.ArrayL
import java.util.L
import javax.net.ssl.SSLC
import org.apache.http.HttpE
import org.apache.http.NameValueP
import org.apache.http.ParseE
import org.apache.http.client.ClientProtocolE
import org.apache.http.client.entity.UrlEncodedFormE
import org.apache.http.client.methods.CloseableHttpR
import org.apache.http.client.methods.HttpG
import org.apache.http.client.methods.HttpP
import org.apache.http.conn.ssl.SSLConnectionSocketF
import org.apache.http.conn.ssl.SSLC
import org.apache.http.conn.ssl.TrustSelfSignedS
import org.apache.http.entity.ContentT
import org.apache.http.entity.mime.MultipartEntityB
import org.apache.http.entity.mime.content.FileB
import org.apache.http.entity.mime.content.StringB
import org.apache.http.impl.client.CloseableHttpC
import org.apache.http.impl.client.HttpC
import org.apache.http.message.BasicNameValueP
import org.apache.http.util.EntityU
import org.junit.T
public class HttpClientTest {
public void jUnitTest() {
* HttpClient连接SSL
public void ssl() {
CloseableHttpClient httpclient =
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(new File(&d:\\tomcat.keystore&));
// 加载keyStore d:\\tomcat.keystore
trustStore.load(instream, &123456&.toCharArray());
} catch (CertificateException e) {
e.printStackTrace();
} finally {
instream.close();
} catch (Exception ignore) {
// 相信自己的CA和所有自签名的证书
SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()).build();
// 只允许使用TLSv1协议
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { &TLSv1& }, null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
// 创建http请求(get方式)
HttpGet httpget = new HttpGet(&https://localhost:8443/myDemo/Ajax/serivceJ.action&);
System.out.println(&executing request& + httpget.getRequestLine());
CloseableHttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println(&----------------------------------------&);
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println(&Response content length: & + entity.getContentLength());
System.out.println(EntityUtils.toString(entity));
EntityUtils.consume(entity);
} finally {
response.close();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} finally {
if (httpclient != null) {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
* post方式提交表单(模拟用户登录请求)
public void postForm() {
// 创建默认的httpClient实例.
CloseableHttpClient httpclient = HttpClients.createDefault();
// 创建httppost
HttpPost httppost = new HttpPost(&http://localhost:8080/myDemo/Ajax/serivceJ.action&);
// 创建参数队列
List formparams = new ArrayList();
formparams.add(new BasicNameValuePair(&username&, &admin&));
formparams.add(new BasicNameValuePair(&password&, &123456&));
UrlEncodedFormEntity uefE
uefEntity = new UrlEncodedFormEntity(formparams, &UTF-8&);
httppost.setEntity(uefEntity);
System.out.println(&executing request & + httppost.getURI());
CloseableHttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null) {
System.out.println(&--------------------------------------&);
System.out.println(&Response content: & + EntityUtils.toString(entity, &UTF-8&));
System.out.println(&--------------------------------------&);
} finally {
response.close();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭连接,释放资源
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
* 发送 post请求访问本地应用并根据传递参数不同返回不同结果
public void post() {
// 创建默认的httpClient实例.
CloseableHttpClient httpclient = HttpClients.createDefault();
// 创建httppost
HttpPost httppost = new HttpPost(&http://localhost:8080/myDemo/Ajax/serivceJ.action&);
// 创建参数队列
List formparams = new ArrayList();
formparams.add(new BasicNameValuePair(&type&, &house&));
UrlEncodedFormEntity uefE
uefEntity = new UrlEncodedFormEntity(formparams, &UTF-8&);
httppost.setEntity(uefEntity);
System.out.println(&executing request & + httppost.getURI());
CloseableHttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null) {
System.out.println(&--------------------------------------&);
System.out.println(&Response content: & + EntityUtils.toString(entity, &UTF-8&));
System.out.println(&--------------------------------------&);
} finally {
response.close();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭连接,释放资源
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
* 发送 get请求
public void get() {
CloseableHttpClient httpclient = HttpClients.createDefault();
// 创建httpget.
HttpGet httpget = new HttpGet(&/&);
System.out.println(&executing request & + httpget.getURI());
// 执行get请求.
CloseableHttpResponse response = httpclient.execute(httpget);
// 获取响应实体
HttpEntity entity = response.getEntity();
System.out.println(&--------------------------------------&);
// 打印响应状态
System.out.println(response.getStatusLine());
if (entity != null) {
// 打印响应内容长度
System.out.println(&Response content length: & + entity.getContentLength());
// 打印响应内容
System.out.println(&Response content: & + EntityUtils.toString(entity));
System.out.println(&------------------------------------&);
} finally {
response.close();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭连接,释放资源
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
* 上传文件
public void upload() {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httppost = new HttpPost(&http://localhost:8080/myDemo/Ajax/serivceFile.action&);
FileBody bin = new FileBody(new File(&F:\\image\\sendpix0.jpg&));
StringBody comment = new StringBody(&A binary file of some kind&, ContentType.TEXT_PLAIN);
HttpEntity reqEntity = MultipartEntityBuilder.create().addPart(&bin&, bin).addPart(&comment&, comment).build();
httppost.setEntity(reqEntity);
System.out.println(&executing request & + httppost.getRequestLine());
CloseableHttpResponse response = httpclient.execute(httppost);
System.out.println(&----------------------------------------&);
System.out.println(response.getStatusLine());
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
System.out.println(&Response content length: & + resEntity.getContentLength());
EntityUtils.consume(resEntity);
} finally {
response.close();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
本实例是采用HttpClient4.3最新版本。该版本与之前的代码写法风&#26684;相差较大,大家多留意下。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1242668次
积分:9467
积分:9467
排名:第1074名
原创:111篇
评论:823条> Android应用开发入门(十一)使用Apache的HttpClient访问Web站点
Android应用开发入门(十一)使用Apache的HttpClient访问Web站点
  文章介绍了使用HttpURLConnection来完成对于HTTP协议的支持。现在介绍一个新的方式来访问Web站点,那就是HttpClient。
  HttpClient是Apache开源组织提供的一个开源的项目,从名字上就可以看出,它是一个简单的HTTP客户端(并不是浏览器),可以发送HTTP请求,接受HTTP响应。但是不会缓存服务器的响应,不能执行HTTP页面中签入嵌入的JS代码,自然也不会对页面内容进行任何解析、处理,这些都是需要开发人员来完成的。
  现在Android已经成功集成了HttpClient,所以开发人员在Android项目中可以直接使用HttpClient来想Web站点提交请求以及接受响应,如果使用其他的Java项目,需要引入进相应的Jar包。HttpClient可以在官网上下载:
HttpClient
  HttpClient其实是一个interface类型,HttpClient封装了对象需要执行的Http请求、身份验证、连接管理和其它特性。从文档上看,HttpClient有三个已知的实现类分别是:AbstractHttpClient,&AndroidHttpClient,&DefaultHttpClient,会发现有一个专门为Android应用准备的实现类AndroidHttpClient,当然使用常规的DefaultHttpClient也可以实现功能,但是既然开发的是Android应用程序,还是使用Android专有的实现类,一定有其优势。
  从两个类包所有在位置就可以看出区别,AndroidHttpClient定义在android.net.http.AndroidHttpClient包下,属于Android原生的http访问,而DefaultHttpClient定义在org.apache.http.impl.client.DefaultHttpClient包下,属于对apche项目的支持。而AndroidHttpClient没有公开的构造函数,只能通过静态方法newInstance()方法来获得AndroidHttpClient对象。
  AndroidHttpClient对于DefaultHttpClient做了一些改进,使其更使用用于Android项目:
关掉过期检查,自连接可以打破所有的时间限制。
可以设置ConnectionTimeOut(连接超时)和SoTimeout(读取数据超时)。
关掉重定向。
使用一个Session缓冲用于SSL Sockets。
如果服务器支持,使用gzip压缩方式用于在服务端和客户端传递的数据。
默认情况下不保留Cookie。    
  简单来说,送HttpClient发送请求、接收响应都很简单,只需要几个步骤即可:
创建HttpClient对象。
创建对应的发送请求的对象,如果需要发送GET请求,则创建HttpGet对象,如果需要发送POST请求,则创建HttpPost对象。
对于发送请求的参数,GET和POST使用的方式不同,GET方式可以使用拼接字符串的方式,把参数拼接在URL结尾;POST方式需要使用setEntity(HttpEntity entity)方法来设置请求参数。
调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法返回一个HttpResponse对象。
调用HttpResponse的对应方法获取服务器的响应头、响应内容等。
DefaultHttpClient
  先看看使用DefaultHttpClient方式发送Web站点请求,上面已经简要说明了步骤,在这里简要说明一个参数的传递问题,对于GET方式,只需要拼接字符串就在URL结尾即可,但是对于POST方式,需要传递HttpEntity对象,HttpEntity为一个接口,有多个实现类,可以使用其间接子继承,UrlEncodedFormEntity类来保存请求参数,并传递给HttpPost。
  此例子简单实现了在Android客户端使用DefaultHttpClient实现一个Http站点登陆的实现,使用的是POST传递,其传递值只需要传递username+password即可,当传递的数据为admin+123则认为登陆成功。Web站点使用.net的架构,一个一般处理程序,简单的比对账户密码,这里就不在此讲解。
本文地址 :
------分隔线----------------------------

我要回帖

更多关于 httpclient4.5.1使用 的文章

 

随机推荐