httpclientpost

更新时间:2023-02-28 23:42:56 阅读: 评论:0

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。

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

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

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

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


怎么用httpclient发送post请求

有时候我们在发送HTTP请求的时候会使用到POST方式,如果是传送普通的表单数据那将很方便,直接将参数到一个Key-value形式的Map
中即可。但是如果我们需要传送的参数是Json格式的,会稍微有点麻烦,我们可以使用HttpClient类库提供的功能来实现这个需求。假设我们需要发
送的数据是:

{
"blog": "http://www.iteblog.com",
"Author": "iteblog"
}

我们可以通过JSONObject够着Json:

JSONObject jsonObject = new JSONObject();

jsonObject.put("blog", "http://www.iteblog.com");
jsonObject.put("Author", "iteblog");

如果需要使用Post方式来发送这个数据,我们可以如下实现:

private HttpMethodBa createMethod(String url, int timeout) {
PostMethod method = null;
try {
method = new PostMethod(url);
JSONObject jsonObject = new JSONObject();

jsonObject.put("blog", "http://www.iteblog.com");
jsonObject.put("Author", "iteblog");

String transJson = jsonObject.toString();
RequestEntity = new StringRequestEntity(transJson, "application/json", "UTF-8");
method.tRequestEntity();
//使用系统提供的默认的恢复策略
method.getParams().tParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
//设置超时的时间
method.getParams().tParameter(HttpMethodParams.SO_TIMEOUT, timeout);
} catch (IllegalArgumentException e) {
logger.error("非法的URL:{}", url);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

return method;
}

  我们通过StringRequestEntity来构造请求实体,在这里,StringRequestEntity将接收三个参数,如下:

public StringRequestEntity(String content, String contentType, String chart)
  throws UnsupportedEncodingException

  其中参数content就是我们需要传输的数据;contentType是传送数据的格式,因为我们的数据格式是json的,所以contentType必须填写application/json(更多的contentType可以参见《HTTP Content-Type常用一览表》);chart是字符集编码。

  然后我们再通过HttpClient对象的executeMethod方法来执行:

int statusCode = httpClient.executeMethod(getMethod);
//只要在获取源码中,服务器返回的不是200代码,则统一认为抓取源码失败,返回null。
if (statusCode != HttpStatus.SC_OK) {
logger.error("Method failed: " + getMethod.getStatusLine() + "\tstatusCode: " + statusCode);
return null;
}

pom.xml文件的关键内容

<dependencies>
<!--网络爬虫-->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.3.1</version>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>14.0.1</version>
</dependency>

<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20140107</version>
</dependency>
</dependencies>

C#怎么使用HttpClient来Post数据

对HttpWebRespon获取的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); 或者,你也可以直接操作HttpWebRespon: HttpWebRespon res = client.GetRespon(); 每调用一次上述任何一个方法,都会导致发出一个HTTP Request, 也就是说,你不能同时得到某个Respon的两种返回形式. 另外,调用后它们任意一个之后,你可以通过client.ResponHeaders来获取服务器返回的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才能得到的资源的长度,如果你确实有这样的需求,建议你可以通过GetRespon(),然后从ResponHeader里获取Content-Length.

httpclient中post参数设置

// post Sent cookie 这个Post 发送去的Cookie
HttpPost httpPost = new HttpPost(uri)
httpPost.addHeader("Cookie", "ONE_VER=1_0");

//下面是发送的实体内容。发出去的是被转义的内容,如果是不转义发送,我也不知道怎么发,请高手指教。
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("实体内容", ""));

//下面是返回内容
CloableHttpRespon respon = httpclient.execute(httpPost);
try{
//要运行内容,如果要处理接收的内容,请在这里写。

} finally {
respon.clo();

}

C#怎么使用HttpClient来Post数据

public static string PostRequest(string url, Encoding encoding, Dictionary<string, object> input = null)
{
var request = WebRequest.Create(new Uri(url));
request.Method = System.Net.WebRequestMethods.Http.Post;
request.ContentType = "application/x-www-form-urlencoded";
if (input != null)
{
var builder = new StringBuilder();
foreach (var item in input)
{
var value = HttpUtility.UrlEncode(item.Value.ToString(), encoding);
builder.AppendFormat("{0}={1}&", item.Key, value);
}
var bytesForArray = encoding.GetBytes(builder.ToString());
request.ContentLength = bytesForArray.Length;
var stream = request.GetRequestStream();
stream.Write(bytesForArray, 0, bytesForArray.Length);
stream.Clo();
}
var respon = request.GetRespon();
var list = new List<byte>();
var buffer = new byte[1024];
int len = 0;
var rStream = respon.GetResponStream();
while ((len = rStream.Read(buffer, 0, buffer.Length)) > 0)
{
list.AddRange(buffer.Take(len));
}
respon.Clo();
return encoding.GetString(list.ToArray());
}

如何使用httpclient进行post请求

http请求传递的都是字符串。这种情况一般使用xml为信息载体。把java类转成xml, client得到xml再转成java类。 UrDTO ur = new UrDTO(); ...//填充ur XStream xstream = new XStream();//使用xstream转换pojo和xml字符串 // HttpPost连接...

本文发布于:2023-02-28 19:07:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/167759897652163.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:httpclientpost.doc

本文 PDF 下载地址:httpclientpost.pdf

标签:httpclientpost
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|