首页编程httpclientpost httpclient中PostMethod和HttpPost的区别

httpclientpost httpclient中PostMethod和HttpPost的区别

编程之家2023-11-0292次浏览

大家好,今天我将为大家揭秘httpclientpost和httpclient中PostMethod和HttpPost的区别的奥秘,希望我的分享能给你带来新的启发和知识。

httpclientpost httpclient中PostMethod和HttpPost的区别

HttpClient使用指南——POST请求

1.创建一个请求客户端:HttpClients.createDefault(),用来实际发起调用post请求,可以类比成浏览器。

2.组装表单请求数据:因需要传递文件,所以通过 MultipartEntityBuilder构造器组装表单实体请求数据。

2.1设置mode为 HttpMultipartMode.RFC6532(必须);

2.2设置字符集为UTF-8(必须);

2.3通过 addBinaryBody追加文件;

2.4通过 addTextBody追加文本参数,若文本为中文则必须指定字符集为GBK或者UTF-8。

httpclientpost httpclient中PostMethod和HttpPost的区别

3.创建一个post请求:通过请求构造器 RequestBuilder的post方法构造一个post请求,通过 setEntity方法向post请求里放置请求参数,通过addHeader方法向post请求里追加请求头信息,请求头信息比如双方约定的token,通过build方法返回请求对象。

4.发起post请求并获得响应:通过请求客户端的execute方法执行请求并获得返回值请求响应。

5.获取响应结果:获取响应对象的实体HttpEntity,通过 EntityUtils的 toString方法将实体转成字符串,这里一般还要指定字符集,尤其是当实体里没有指定字符集时。

注意: MultipartEntityBuilder必须指定 mode为 HttpMultipartMode.RFC6532,且必须设置字符集为 UTF-8,否则若传递的文件名包含中文,则文件名乱码;对于普通的文本参数,中文指定UTF-8或者GBK接收方均未发现乱码情况;接收方需要将请求转为 MultipartHttpServetRequest方可获取到文件,示例代码如下:

httpclient发送post请求访问需要有用户名和密码的登录界面

1.服务器认证(Server Authentication)

HttpClient处理服务器认证几乎是透明的,仅需要开发人员提供登录信息(login credentials)。登录信息保存在HttpState类的实例中,可以通过 setCredentials(String realm, Credentials cred)和getCredentials(String realm)来获取或设置。

httpclientpost httpclient中PostMethod和HttpPost的区别

HttpClient内建的自动认证,可以通过HttpMethod类的setDoAuthentication(boolean doAuthentication)方法关闭,而且这次关闭只影响HttpMethod当前的实例。

2.代理认证(proxy authentication)

除了登录信息需单独存放以外,代理认证与服务器认证几乎一致。用 setProxyCredentials(String realm, Credentials cred)和 getProxyCredentials(String realm)设、取登录信息。

3.认证方案(authentication schemes)

是HTTP中规定最早的也是最兼容的方案,遗憾的是也是最不安全的一个方案,因为它以明码传送用户名和密码。它要求一个UsernamePasswordCredentials实例,可以指定服务器端的访问空间或采用默认的登录信息。

C#怎么使用HttpClient来Post数据

对HttpWebResponse获取的HTML进行文字编码转换,使之不会出现乱码;

自动在Session间保持Cookie,Referer等相关信息;

模拟HTML表单提交;

向服务器上传文件;

对二进制的资源,直接获取返回的字节数组(byte[]),或者保存为文件

为了解决这些问题,我开发了HttpClient类.下面是使用的方法:

获取编码转换后的字符串

HttpClient client=new HttpClient(url);

string html=client.GetString();

GetString()函数内部会查找Http Headers,以及HTML的Meta标签,试图找出获取的内容的编码信息.如果都找不到,它会使用client.DefaultEncoding,这个属性默认为utf-8,也可以手动设置.

自动保持Cookie, Referer

HttpClient client=new HttpClient(url1, null, true);

string html1=client.GetString();

client.Url=url2;

string html2=client.GetString();

这里HttpClient的第三个参数,keepContext设置为真时,HttpClient会自动记录每次交互时服务器对Cookies进行的操作,同时会以前一次请求的Url为Referer.在这个例子里,获取html2时,会把url1作为Referer,同时会向服务器传递在获取html1时服务器设置的Cookies.当然,你也可以在构造HttpClient时直接提供第一次请求要发出的Cookies与Referer:

HttpClient client=new HttpClient(url, new WebContext(cookies, referer), true);

或者,在使用过程中随时修改这些信息:

client.Context.Cookies=cookies;

client.Context.referer=referer;

模拟HTML表单提交

HttpClient client=new HttpClient(url);

client.PostingData.Add(fieldName1, filedValue1);

client.PostingData.Add(fieldName2, fieldValue2);

string html=client.GetString();

上面的代码相当于提交了一个有两个input的表单.在PostingData非空,或者附加了要上传的文件时(请看下面的上传和文件), HttpClient会自动把HttpVerb改成POST,并将相应的信息附加到Request上.

向服务器上传文件

HttpClient client=new HttpClient(url);

client.AttachFile(fileName, fieldName);

client.AttachFile(byteArray, fileName, fieldName);

string html=client.GetString();

这里面的fieldName相当于<input type="file" name="fieldName"/>里的fieldName. fileName当然就是你想要上传的文件路径了.你也可以直接提供一个byte[]作为文件内容,但即使如此,你也必须提供一个文件名,以满足HTTP规范的要求.

不同的返回形式

字符串: string html= client.GetString();

流: Stream stream= client.GetStream();

字节数组: byte[] data= client.GetBytes();

保存到文件: client.SaveAsFile(fileName);

或者,你也可以直接操作HttpWebResponse: HttpWebResponse res= client.GetResponse();

每调用一次上述任何一个方法,都会导致发出一个HTTP Request,也就是说,你不能同时得到某个Response的两种返回形式.

另外,调用后它们任意一个之后,你可以通过client.ResponseHeaders来获取服务器返回的HTTP头.

下载资源的指定部分(用于断点续传,多线程下载)

HttpClient client=new HttpClient(url);

//发出HEAD请求,获取资源长度

int length=client.HeadContentLength();

//只获取后一半内容

client.StartPoint=length/2;

byte[] data=client.GetBytes();

HeadContentLength()只会发出HTTP HEAD请求.根据HTTP协议, HEAD与GET的作用等同,但是,只返回HTTP头,而不返回资源主体内容.也就是说,用这个方法,你没法获取一个需要通过POST才能得到的资源的长度,如果你确实有这样的需求,建议你可以通过GetResponse(),然后从ResponseHeader里获取Content-Length.

httpclient中PostMethod和HttpPost的区别

1.服务器认证(Server Authentication)

HttpClient处理服务器认证几乎是透明的,仅需要开发人员提供登录信息(login credentials)。登录信息保存在HttpState类的实例中,可以通过 setCredentials(String realm, Credentials cred)和getCredentials(String realm)来获取或设置。

HttpClient内建的自动认证,可以通过HttpMethod类的setDoAuthentication(boolean doAuthentication)方法关闭,而且这次关闭只影响HttpMethod当前的实例。

2.代理认证(proxy authentication)

除了登录信息需单独存放以外,代理认证与服务器认证几乎一致。用 setProxyCredentials(String realm, Credentials cred)和 getProxyCredentials(String realm)设、取登录信息。

3.认证方案(authentication schemes)

是HTTP中规定最早的也是最兼容的方案,遗憾的是也是最不安全的一个方案,因为它以明码传送用户名和密码。它要求一个UsernamePasswordCredentials实例,可以指定服务器端的访问空间或采用默认的登录信息。

关于httpclientpost,httpclient中PostMethod和HttpPost的区别的介绍到此结束,希望对大家有所帮助。

delete语句?delete语句有哪些代码编程,代码编程是什么呢