httpclient怎么批处理获取命令返回值返回数据,取到值

10:09 提问
.NET后台 httpclient
如何post请求获取返回的数据
我目前在做一个支付接口,参数已经编码成base64
另外有一个URL链接 ,
我在httpclient post请求数据没有获取到响应的值,有没有大虾写一个示例啊?
按赞数排序
是不是post参数,格式等不正确。
其他相似问题14461人阅读
转载地址:/smyhvae/p/4004983.html
&这个关于http的内容写的比较好
一、HTTP协议初探:
HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是Internet上目前使用最广泛的应用层协议,它基于传输层的TCP协议进行通信,HTTP协议是通用的、无状态的协议。
这几个名词有一种通俗的解释:
通讯协议:双方对话的标准通用的:用了都说好,谁用谁知道无状态的:翻脸不认人超文本:除了文本,还可以是音频、视频
HTTP协议与Android开发之间的关系:
HTTP协议的学习重点:
Http协议基础概念、请求响应模型、提交请求的不同方法、响应状态判断、获取响应以及解析响应、数据下载的实现方法、数据上传的实现方法、请求头详细内容、响应头详细内容等
关于http协议的学习,推荐两个链接:
二、http协议概念:
1、http协议定义:
WWW是以Internet作为传输媒介的一个应用系统,WWW网上基本的传输单位是Web网页。WWW的工作是基于客户机/服务器计算模型,由Web浏览器和Web服务器构成,两者之间采用超文本传输协议HTTP进行通信。
HTTP协议时基于TCP/IP协议之上的协议,是Web浏览器和Web服务器之间的应用层的协议,是通用的、无状态的面向对象的协议。&
如果要实现网络互联我们要思考两个需要解决的技术问题:
第一:浏览器和服务器是通过什么来连接的。第二:这种连接方式是怎么实现的。
通过Internet去发送到服务器当中,而Internet内部可以通过三种方式来实现发送信息和数据:
第一种:HTTP协议,也是在工作中最常用的,是建立在TCP/IP基础上实现的。第二种:FTP协议第三种:TCP/IP协议,它也是最底层的协议,其它的方式必须是要通过它,但是要想实现这种协议必须要实现socket编程,这种方法是用来上传一些比较大的文件,视频,进行断点续传的操作。
2、客户端连接服务器实现内部的原理如下:
分析上图,步骤如下:
第一步:在浏览器客户端中得到用户输入的内容。&第二步:浏览器得到这个网址之后,内部会将这个域名发送到DNS上,进行域名解析。得到它的IP之后就会链接到指定的服务器上,假如服务器的地址是:221.104.13.32:80,从浏览器到服务器端口它使用到最底层的TCP/IP协议。&第三步:实现TCP/IP协议用Socket来完成,使用了Socket的套接字。&第四步:服务器端的80端口监听客户端的链接,这样客户端到服务器就链接上了。服务器接收到这些内容之后,并按照这些请求的路径找到对应的页面,进一步找到对应的网页内容,返回给客户端。
通俗一点讲,用户在浏览器输入网址,通过http协议发出去,网址经过DNS域名解析,解析成指定的ip地址,并在80端口上监听用户的请求。服务器监听到请求之后,会以三种方式返回给客户端:HTML、XML、JASON。
HTTP返回请求数据的三种方式:
1、以HTML代码内容返回。&2、以XML字符串的形式返回,在以后的android开发中这种形式返回数据比较多。&3、以JSON对象形式返回,在网络流量上考虑JSON要比XML方式要好一些,便于解析。
在Android当中,一般使用xml和Json数据解析。
三、使用HTTP协议访问网络:
Android中的WebView控件已经在后台帮我们处理好了发送HTTP请求、接收服务响应、解析返回数据,以及最终的页面展示这几步工作,不过由于它封装得太好了,反而不能直观地看出HTTP协议是如何工作的。因此接下来我们通过手动发送HTTP请求的方式,来更加深入的了解这一过程。
在Android上发送HTTP请求的方式一般有两种:HttpURLConnection和HttpCient。我们先来学习HttpCient。
四、HttpCient:
HttpClient是Apache开源组织提供的HTTP网络访问接口(一个开源的项目),从名字上就可以看出,它是一个简单的HTTP客户端(并不是浏览器),可以发送HTTP请求,接受HTTP响应。但是不会缓存服务器的响应,不能执行HTTP页面中签入嵌入的JS代码,自然也不会对页面内容进行任何解析、处理,这些都是需要开发人员来完成的。
现在Android已经成功集成了HttpClient,所以开发人员在Android项目中可以直接使用HttpClient来想Web站点提交请求以及接受响应,如果使用其他的Java项目,需要引入进相应的Jar包。HttpClient可以在官网上下载。官网链接:
HttpClient其实是一个interface类型,HttpClient封装了对象需要执行的Http请求、身份验证、连接管理和其它特性。既然HttpClient是一个接口,因此无法创建它的实例。从文档上看,HttpClient有三个已知的实现类分别是:AbstractHttpClient, AndroidHttpClient, DefaultHttpClient,会发现有一个专门为Android应用准备的实现类AndroidHttpClient,当然使用常规的DefaultHttpClient也可以实现功能。
从两个类包所有在位置就可以看出区别,AndroidHttpClient定义在android.net.http.AndroidHttpClient包下,属于Android原生的http访问,而DefaultHttpClient定义在org.apache.http.impl.client.DefaultHttpClient包下,属于对apche项目的支持。而AndroidHttpClient没有公开的构造函数,只能通过静态方法newInstance()方法来获得AndroidHttpClient对象。
简单来说,用HttpClient发送请求、接收响应都很简单,只需要五大步骤即可:(要牢记)
创建代表客户端的HttpClient对象。创建代表请求的对象,如果需要发送GET请求,则创建HttpGet对象,如果需要发送POST请求,则创建HttpPost对象。注:对于发送请求的参数,GET和POST使用的方式不同,GET方式可以使用拼接字符串的方式,把参数拼接在URL结尾;POST方式需要使用setEntity(HttpEntity
entity)方法来设置请求参数。
调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法后,将获得服务器返回的HttpResponse对象。服务器发还给我们的数据就在这个HttpResponse相应当中。调用HttpResponse的对应方法获取服务器的响应头、响应内容等。
检查相应状态是否正常。服务器发给客户端的相应,有一个相应码:相应码为200,正常;相应码为404,客户端错误;相应码为505,服务器端错误。获得相应对象当中的数据
五、DefaultHttpClient:
根据上面的五大步骤,我们就拿DefaultHttpClient举例来访问网络。注意这里有一条原则:在主线程中不能访问网络(在android4.0之后的加入的概念)。
【实例】点击按钮,获取百度首页的文本内容
新建工程文件m04_http01。完整版代码如下:
首先是布局文件,虽然比较简单,但还是贴上吧。
activity_main.xml代码如下:
&LinearLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&
tools:context=&.MainActivity& &
android:id=&@+id/button1&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:text=&Send Request& /&
&ScrollView
android:layout_width=&match_parent&
android:layout_height=&match_parent& &
android:id=&@+id/TextView1&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:text=&@string/hello_world& /&
&/ScrollView&
&/LinearLayout&
布局文件中,我们用一个ScrollView来包裹TextView。借助ScrollView控件的话,就可以允许我们一滚动的形式查看屏幕外i的那部分内容。
MainActivity.java的代码如下:(注释比较详细)
1 package com.example.m04_http01;
3 import org.apache.http.HttpE
4 import org.apache.http.HttpR
5 import org.apache.http.client.HttpC
6 import org.apache.http.client.methods.HttpG
7 import org.apache.http.impl.client.DefaultHttpC
8 import org.apache.http.util.EntityU
9 import android.app.A
<span style="color:# import android.os.B
<span style="color:# import android.os.H
<span style="color:# import android.os.M
<span style="color:# import android.view.V
<span style="color:# import android.view.View.OnClickL
<span style="color:# import android.widget.B
<span style="color:# import android.widget.TextV
<span style="color:#
<span style="color:# public class MainActivity extends Activity {
<span style="color:#
<span style="color:#
public static final int SHOW_RESPONSE = 0;
<span style="color:#
<span style="color:#
private Button button_sendR
<span style="color:#
private TextView textView_
<span style="color:#
<span style="color:#
//新建Handler的对象,在这里接收Message,然后更新TextView控件的内容
<span style="color:#
private Handler handler = new Handler() {
<span style="color:#
<span style="color:#
<span style="color:#
public void handleMessage(Message msg) {
<span style="color:#
super.handleMessage(msg);
<span style="color:#
switch (msg.what) {
<span style="color:#
case SHOW_RESPONSE:
<span style="color:#
String response = (String) msg.
<span style="color:#
textView_response.setText(response);
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
protected void onCreate(Bundle savedInstanceState) {
<span style="color:#
super.onCreate(savedInstanceState);
<span style="color:#
setContentView(R.layout.activity_main);
<span style="color:#
textView_response = (TextView)findViewById(R.id.TextView1);
<span style="color:#
button_sendRequest = (Button)findViewById(R.id.button1);
<span style="color:#
<span style="color:#
button_sendRequest.setOnClickListener(new OnClickListener() {
<span style="color:#
<span style="color:#
//点击按钮时,执行sendRequestWithHttpClient()方法里面的线程
<span style="color:#
<span style="color:#
public void onClick(View v) {
<span style="color:#
// TODO Auto-generated method stub
<span style="color:#
sendRequestWithHttpClient();
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
//方法:发送网络请求,获取百度首页的数据。在里面开启线程
<span style="color:#
private void sendRequestWithHttpClient() {
<span style="color:#
new Thread(new Runnable() {
<span style="color:#
<span style="color:#
<span style="color:#
public void run() {
<span style="color:#
//用HttpClient发送请求,分为五步
<span style="color:#
//第一步:创建HttpClient对象
<span style="color:#
HttpClient httpCient = new DefaultHttpClient();
<span style="color:#
//第二步:创建代表请求的对象,参数是访问的服务器地址
<span style="color:#
HttpGet httpGet = new HttpGet(&&);
<span style="color:#
<span style="color:#
<span style="color:#
//第三步:执行请求,获取服务器发还的相应对象
<span style="color:#
HttpResponse httpResponse = httpCient.execute(httpGet);
<span style="color:#
//第四步:检查相应的状态是否正常:检查状态码的&#20540;是200表示正常
<span style="color:#
if (httpResponse.getStatusLine().getStatusCode() == 200) {
<span style="color:#
//第五步:从相应对象当中取出数据,放到entity当中
<span style="color:#
HttpEntity entity = httpResponse.getEntity();
<span style="color:#
String response = EntityUtils.toString(entity,&utf-8&);//将entity当中的数据转换为字符串
<span style="color:#
<span style="color:#
//在子线程中将Message对象发出去
<span style="color:#
Message message = new Message();
<span style="color:#
message.what = SHOW_RESPONSE;
<span style="color:#
message.obj = response.toString();
<span style="color:#
handler.sendMessage(message);
<span style="color:#
<span style="color:#
<span style="color:#
} catch (Exception e) {
<span style="color:#
// TODO Auto-generated catch block
<span style="color:#
e.printStackTrace();
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
}).start();//这个start()方法不要忘记了
<span style="color:#
<span style="color:#
<span style="color:# }
大致流程如下:
这里,我们添加了一个sendRequestWithHttpClient()方法(第63行),并在点击事件中去调用这个方法。在这个方法中,先开启了一个子线程。
69至81行:在子线程中使用HttpClient发出一条HTTP请求,请求的目标地址是百度的首页。
83至87行:为了能让结果在界面上显示出来,将服务器返回的数据放到了Message对象中,并用Handler将Message发出去。
需要注意的是:
第80行的entity就是服务器发还给客户端的数据。
最后要记得在清单文件中声明访问网络的权限:
android:minSdkVersion=&8&
android:targetSdkVersion=&16& /&
&uses-permission android:name=&android.permission.INTERNET&/&
程序运行后,点击按钮,显示结果如下:
服务器返回给我们的就是这种HTML代码,只是通常情况下浏览器都会将这些代码解析成漂亮的网页后再展示出来。
参考链接:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:196070次
积分:1741
积分:1741
排名:第17711名
原创:30篇
转载:32篇
评论:40条
(1)(3)(4)(5)(1)(1)(10)(5)(24)(8)问题:使用httpclient如何获得列表中的指定数据
描述:使用httpclient如何通过参数id获得列表中的指定数据解决方案1: 和数据提供端约定通信方式和数据格式,服务器可以给你url让你通过http获取数据。。可以给你RPC接口。。。可以直接给你数据库的连接字符串URL、username、password直接连接数据库。。。巴拉巴拉巴拉。。好多好多,既然你提到了httpclient 那么想必是走HTTP协议,该传的参数传过去,把返回来的内容解析出来就是了,如果是json就直接转换,要是html什么的 自己写正则把需要的数据扣出来吧。。 解决方案2:没有看懂问题,如果是想获取html页面的数据的,建议使用jsoup,拥有类似于jquery的操作方式获取页面的数据
以上介绍了“使用httpclient如何获得列表中的指定数据”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/1174098.html
上一篇: 下一篇:2010年12月 扩充话题大版内专家分月排行榜第二2010年8月 扩充话题大版内专家分月排行榜第二2010年7月 扩充话题大版内专家分月排行榜第二2010年6月 扩充话题大版内专家分月排行榜第二
2010年6月 Java大版内专家分月排行榜第三2010年5月 扩充话题大版内专家分月排行榜第三2010年4月 扩充话题大版内专家分月排行榜第三
2010年8月 Java大版内专家分月排行榜第三
2010年8月 Java大版内专家分月排行榜第三
2010年8月 Java大版内专家分月排行榜第三
2010年8月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 批处理获取命令返回值 的文章

 

随机推荐