- 浏览: 534611 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (377)
- J2EE (61)
- ORACLE (36)
- JS (15)
- EXT (0)
- win7 (12)
- TOMCAT (10)
- game (1)
- ie (5)
- etc (8)
- ibatis (3)
- ORACLE 客户端 (1)
- bat (3)
- 健康 (127)
- baby (4)
- html (12)
- myeclipse (16)
- 射手 字幕默认下载 位置 (1)
- office (0)
- car (2)
- xxx (1)
- python简介 (1)
- FusionCharts (1)
- dorado (4)
- english (3)
- weblogic (3)
- request/servlet (3)
- wsdl (1)
- offie2010 visio2010 下载 (1)
- nexus5 (0)
- chrome (3)
- ssi (2)
- 安卓 (3)
- nexus ipad (1)
- mysql (4)
- json (3)
- struts (6)
- datagrid (1)
- highcharts (1)
- tools (2)
- tool (1)
- spring3 (1)
- jedit (1)
- java (4)
- windows (1)
- easyui (2)
- 液晶显示器色温 (1)
- mybatis (1)
- where (1)
- sublime (1)
- spring4 (3)
最新评论
-
spring_springmvc:
如何在java Web项目中开发WebService接口,地址 ...
java 调用WebService服务接口 -
chenzheng8975:
阅
人生三大陷阱 -
ygbb007:
直接OD就能破解的
myBase Desktop 6.0 破解方法 -
lanlansnss:
直接删除nyfedit.ini文件即可
myBase Desktop 6.0 破解方法 -
yunzhu:
LZ写博客不太注重排版啊,排版不行别人没法看的
PermGen space
HttpClient4.X的代理添加实现(转自http://blog.csdn.net/hblfyla/article/details/54962898)
package org.yla.test;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
public class HttpClientTest {
String url = "xxxxxxxxxxxxxxxxxxxxxxxxx";
String ip = "202.107.233.85";
int port = 8080;
String username = "";
String password = "";
/**
* 使用HttpClient4实现代理 202.107.233.85 8080
*
* @throws Exception
*/
@Test
public void test1() throws Exception {
HttpClientBuilder build = HttpClients.custom();
HttpHost proxy = new HttpHost(ip, port);
CloseableHttpClient client = build.setProxy(proxy).build();
HttpGet request = new HttpGet(url);
CloseableHttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity));
}
/**
* 使用httpclient3实现代理
*
* @throws Exception
*/
@Test
public void test2() throws Exception {
HttpClient httpClient = new HttpClient();
httpClient.getHostConfiguration().setProxy(ip, port);
GetMethod method = new GetMethod(url);
httpClient.executeMethod(method);
String result = new String(method.getResponseBody());
System.out.println(result);
}
/**
* 使用httpclient4实现代理(带密码的代理)
*
* @throws Exception
*/
@Test
public void test3() throws Exception {
HttpClientBuilder build = HttpClients.custom();
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
AuthScope authscope = new AuthScope(ip, port);
Credentials credentials = new UsernamePasswordCredentials(username,
password);
credentialsProvider.setCredentials(authscope, credentials);
CloseableHttpClient client = build.setDefaultCredentialsProvider(
credentialsProvider).build();
HttpGet request = new HttpGet(url);
CloseableHttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity));
}
/**
* 使用httpclient3实现代理(带密码的代理)
*
* @throws Exception
*/
@Test
public void test4() throws Exception {
HttpClient httpClient = new HttpClient();
org.apache.commons.httpclient.auth.AuthScope authscope = new org.apache.commons.httpclient.auth.AuthScope(
ip, port);
org.apache.commons.httpclient.Credentials credentials = new org.apache.commons.httpclient.UsernamePasswordCredentials(
username, password);
httpClient.getState().setProxyCredentials(authscope, credentials);
GetMethod method = new GetMethod(url);
httpClient.executeMethod(method);
String result = new String(method.getResponseBody());
System.out.println(result);
}
/**
* 模拟登录官网(http://mis.pyc.com.cn�?
*
* @throws Exception
*/
@Test
public void testLogin() throws Exception {
HttpClientBuilder build = HttpClients.custom();
CloseableHttpClient client = build.build();
HttpPost post = new HttpPost("http://mis.pyc.com.cn/login.aspx");
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("__VIEWSTATE",
"/wEPDwUJNjUwNzE0MTM4ZGQzh+vF2xGjdG8Q15kIqgR0CpxhmPucdCqZOPcglRZr/w=="));
params.add(new BasicNameValuePair(
"__EVENTVALIDATION",
"/wEWBQLYtKSdCALEhISFCwKd+7qdDgKC3IeGDAK7q7GGCOqhJpRD8S8yy3ZAlPTSsmPzRUoXMK0mQvGgzlk6hm+G"));
params.add(new BasicNameValuePair("txtName", "xxxxx"));
params.add(new BasicNameValuePair("txtPwd", "xxxxxx"));
params.add(new BasicNameValuePair("btnLogin", "xxxx"));
HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
post.setEntity(entity);
CloseableHttpResponse response = client.execute(post);
int statusCode = response.getStatusLine().getStatusCode();
System.err.println("状态" + statusCode);
if (statusCode == 302) {
Header[] location = response.getHeaders("location");
String rediretUrl = null;
if (location.length == 1) {
rediretUrl = "http://mis.pyc.com.cn" + location[0].getValue();
System.err.println("跳转地址: " + rediretUrl);
}
Header[] allHeaders = response.getAllHeaders();
System.out.println("==================response===================");
for (Header header : allHeaders) {
System.err.println(header.getName() + ": " + header.getValue());
}
Header cookieHeader = response.getFirstHeader("Set-Cookie");
String cookie = cookieHeader.getValue();
System.out.println("cookie: " + cookie);
HttpGet httpGet = new HttpGet(rediretUrl);
httpGet.addHeader("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
// httpGet.addHeader("Accept-Encoding", "gzip, deflate, sdch");
// httpGet.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
httpGet.addHeader("Connection", "keep-alive");
httpGet.addHeader("Cookie", cookie);
httpGet.addHeader("Host", "mis.pyc.com.cn");
httpGet.addHeader("Referer", "http://mis.pyc.com.cn/login.aspx");
httpGet.addHeader(
"User-Agent",
"ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36");
response = client.execute(httpGet);
HttpEntity entity2 = response.getEntity();
System.out
.println("----------------------------------------------");
System.out.println(EntityUtils.toString(entity2));
}
}
}
// 创建HttpClientBuilder
HttpClientBuilder httpClientBuilder = HttpClients.custom();
CloseableHttpClient httpclient = null;
CloseableHttpResponse response = null;
try {
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, TenpayServiceCore.mch_id.toCharArray()).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" },
null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/secapi/");
//System.out.println("executing request" + httpPost.getRequestLine());
///////////////////
//////////////////////
//判断是否使用代理
if (ProxyUtil.getInstance().getIsUseProxy()) {
System.out.println("==========tenpay proxy req");
ProxyUtil proxy = ProxyUtil.getInstance();
//创建认证,并设置认证范围
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(proxy.getHttpProxyIP(), proxy.getHttpProxyPort()),
new UsernamePasswordCredentials(proxy.getHttpProxyUser(), proxy.getHttpProxyPwd()));
//////////////
httpClientBuilder.setSSLSocketFactory(sslsf);
// 设置HTTP代理IP和端口
/*CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope("localhost", 8888),
new UsernamePasswordCredentials("squid", "squid"));
credsProvider.setCredentials(new AuthScope("httpbin.org", 80),
new UsernamePasswordCredentials("user", "passwd"));
httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();*/
httpclient = httpClientBuilder.setDefaultCredentialsProvider(credsProvider).build();
//System.out.println("executing request" + httpPost.getRequestLine());
// 设置类型
// 依次是目标请求地址,端口号,协议类型
HttpHost targethost = new HttpHost("https://api.mch.weixin.qq.com/", 443, "https");
// 代理的设置
HttpHost proxyhost = new HttpHost(proxy.getHttpProxyIP(), proxy.getHttpProxyPort());
RequestConfig config = RequestConfig.custom().setProxy(proxyhost).build();
httpPost.setConfig(config);
response = httpclient.execute(targethost, httpPost);
} else {
httpclient = httpClientBuilder.setSSLSocketFactory(sslsf).build();
response = httpclient.execute(httpPost);
}
package org.yla.test;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.Credentials;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
public class HttpClientTest {
String url = "xxxxxxxxxxxxxxxxxxxxxxxxx";
String ip = "202.107.233.85";
int port = 8080;
String username = "";
String password = "";
/**
* 使用HttpClient4实现代理 202.107.233.85 8080
*
* @throws Exception
*/
@Test
public void test1() throws Exception {
HttpClientBuilder build = HttpClients.custom();
HttpHost proxy = new HttpHost(ip, port);
CloseableHttpClient client = build.setProxy(proxy).build();
HttpGet request = new HttpGet(url);
CloseableHttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity));
}
/**
* 使用httpclient3实现代理
*
* @throws Exception
*/
@Test
public void test2() throws Exception {
HttpClient httpClient = new HttpClient();
httpClient.getHostConfiguration().setProxy(ip, port);
GetMethod method = new GetMethod(url);
httpClient.executeMethod(method);
String result = new String(method.getResponseBody());
System.out.println(result);
}
/**
* 使用httpclient4实现代理(带密码的代理)
*
* @throws Exception
*/
@Test
public void test3() throws Exception {
HttpClientBuilder build = HttpClients.custom();
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
AuthScope authscope = new AuthScope(ip, port);
Credentials credentials = new UsernamePasswordCredentials(username,
password);
credentialsProvider.setCredentials(authscope, credentials);
CloseableHttpClient client = build.setDefaultCredentialsProvider(
credentialsProvider).build();
HttpGet request = new HttpGet(url);
CloseableHttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity));
}
/**
* 使用httpclient3实现代理(带密码的代理)
*
* @throws Exception
*/
@Test
public void test4() throws Exception {
HttpClient httpClient = new HttpClient();
org.apache.commons.httpclient.auth.AuthScope authscope = new org.apache.commons.httpclient.auth.AuthScope(
ip, port);
org.apache.commons.httpclient.Credentials credentials = new org.apache.commons.httpclient.UsernamePasswordCredentials(
username, password);
httpClient.getState().setProxyCredentials(authscope, credentials);
GetMethod method = new GetMethod(url);
httpClient.executeMethod(method);
String result = new String(method.getResponseBody());
System.out.println(result);
}
/**
* 模拟登录官网(http://mis.pyc.com.cn�?
*
* @throws Exception
*/
@Test
public void testLogin() throws Exception {
HttpClientBuilder build = HttpClients.custom();
CloseableHttpClient client = build.build();
HttpPost post = new HttpPost("http://mis.pyc.com.cn/login.aspx");
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
params.add(new BasicNameValuePair("__VIEWSTATE",
"/wEPDwUJNjUwNzE0MTM4ZGQzh+vF2xGjdG8Q15kIqgR0CpxhmPucdCqZOPcglRZr/w=="));
params.add(new BasicNameValuePair(
"__EVENTVALIDATION",
"/wEWBQLYtKSdCALEhISFCwKd+7qdDgKC3IeGDAK7q7GGCOqhJpRD8S8yy3ZAlPTSsmPzRUoXMK0mQvGgzlk6hm+G"));
params.add(new BasicNameValuePair("txtName", "xxxxx"));
params.add(new BasicNameValuePair("txtPwd", "xxxxxx"));
params.add(new BasicNameValuePair("btnLogin", "xxxx"));
HttpEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
post.setEntity(entity);
CloseableHttpResponse response = client.execute(post);
int statusCode = response.getStatusLine().getStatusCode();
System.err.println("状态" + statusCode);
if (statusCode == 302) {
Header[] location = response.getHeaders("location");
String rediretUrl = null;
if (location.length == 1) {
rediretUrl = "http://mis.pyc.com.cn" + location[0].getValue();
System.err.println("跳转地址: " + rediretUrl);
}
Header[] allHeaders = response.getAllHeaders();
System.out.println("==================response===================");
for (Header header : allHeaders) {
System.err.println(header.getName() + ": " + header.getValue());
}
Header cookieHeader = response.getFirstHeader("Set-Cookie");
String cookie = cookieHeader.getValue();
System.out.println("cookie: " + cookie);
HttpGet httpGet = new HttpGet(rediretUrl);
httpGet.addHeader("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
// httpGet.addHeader("Accept-Encoding", "gzip, deflate, sdch");
// httpGet.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
httpGet.addHeader("Connection", "keep-alive");
httpGet.addHeader("Cookie", cookie);
httpGet.addHeader("Host", "mis.pyc.com.cn");
httpGet.addHeader("Referer", "http://mis.pyc.com.cn/login.aspx");
httpGet.addHeader(
"User-Agent",
"ozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36");
response = client.execute(httpGet);
HttpEntity entity2 = response.getEntity();
System.out
.println("----------------------------------------------");
System.out.println(EntityUtils.toString(entity2));
}
}
}
// 创建HttpClientBuilder
HttpClientBuilder httpClientBuilder = HttpClients.custom();
CloseableHttpClient httpclient = null;
CloseableHttpResponse response = null;
try {
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, TenpayServiceCore.mch_id.toCharArray()).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" },
null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/secapi/");
//System.out.println("executing request" + httpPost.getRequestLine());
///////////////////
//////////////////////
//判断是否使用代理
if (ProxyUtil.getInstance().getIsUseProxy()) {
System.out.println("==========tenpay proxy req");
ProxyUtil proxy = ProxyUtil.getInstance();
//创建认证,并设置认证范围
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope(proxy.getHttpProxyIP(), proxy.getHttpProxyPort()),
new UsernamePasswordCredentials(proxy.getHttpProxyUser(), proxy.getHttpProxyPwd()));
//////////////
httpClientBuilder.setSSLSocketFactory(sslsf);
// 设置HTTP代理IP和端口
/*CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(new AuthScope("localhost", 8888),
new UsernamePasswordCredentials("squid", "squid"));
credsProvider.setCredentials(new AuthScope("httpbin.org", 80),
new UsernamePasswordCredentials("user", "passwd"));
httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();*/
httpclient = httpClientBuilder.setDefaultCredentialsProvider(credsProvider).build();
//System.out.println("executing request" + httpPost.getRequestLine());
// 设置类型
// 依次是目标请求地址,端口号,协议类型
HttpHost targethost = new HttpHost("https://api.mch.weixin.qq.com/", 443, "https");
// 代理的设置
HttpHost proxyhost = new HttpHost(proxy.getHttpProxyIP(), proxy.getHttpProxyPort());
RequestConfig config = RequestConfig.custom().setProxy(proxyhost).build();
httpPost.setConfig(config);
response = httpclient.execute(targethost, httpPost);
} else {
httpclient = httpClientBuilder.setSSLSocketFactory(sslsf).build();
response = httpclient.execute(httpPost);
}
发表评论
-
Enable debug logging for this logger for a complete list of JARs that were scann
2018-06-28 21:59 1794修改EL表达式,例如"${owner.new}& ... -
job spring3--spring4
2017-12-28 09:21 461job spring3-->spring4 org ... -
java的(PO,VO,TO,BO,DAO,POJO)解释
2017-06-12 10:26 536java的(PO,VO,TO,BO,DAO,POJO) ... -
高內聚、低耦合。多聚合、少繼承
2017-05-22 15:52 799面向對象原則:高內聚、低耦合。多聚合、少繼承 2015-05 ... -
savesavesavesavesavesave
2017-05-18 17:24 493savesavesavesavesavesave uploa ... -
eclipse 图标的含义
2016-10-13 15:11 518... -
log4j-struts异常日志打印
2016-08-24 17:04 1062log4j.appender.myfile.layout.Co ... -
struts2 Action中获取request, response对象
2016-07-21 09:43 1171ajax不能完成文件下载, ... -
request和response的中文乱码问题
2016-03-04 10:39 1377request和response的中文乱码问题 request ... -
sun.misc.BASE64Encoder找不到jar包的解决方法
2015-06-29 15:10 845sun.misc.BASE64Encoder找不到jar包的解 ... -
jar 包 用途(jar功能对照表)
2015-04-08 16:07 1646jar包用途(jar功能对照表) axis.jar SOAP ... -
struts上传
2014-08-22 15:37 477jsp页面 <meta http-equiv=" ... -
java调用打印机打印自定义的图片
2014-08-19 16:03 3831package test; import java.awt. ... -
JAVA基类和派生类
2014-05-22 16:02 1299JAVA基类和派生类 从 ... -
web.xml配置详解
2014-02-20 08:56 8242007-10-16 17:12 Web.XML 配 ... -
不要使用sun.misc.BASE64Encoder
2014-02-18 10:10 1179一直以来Base64的加密解密都是使用sun.misc包下的B ... -
自定义Result
2014-01-13 10:18 752自定义Result 5.7.1 什么是自定义Result ... -
ant+javadoc生成API文档
2014-01-02 17:16 972ant+javadoc生成API文档 分类: ant 2006 ... -
ssi包下载
2013-12-27 10:15 971Spring官网改版后找了好 ... -
webAppRootKey参数问题
2013-12-25 14:40 833...
相关推荐
HttpClient 3.1是在2006年发布的,虽然现在已经有些过时(因为更现代的替代品如HttpURLConnection和Apache HttpClient 4.x及更高版本已经出现),但它仍然是许多遗留系统和项目中广泛使用的组件。 **主要功能** 1. ...
虽然`commons-httpclient`是一个成熟的库,但随着Java生态系统的发展,现在更推荐使用Java 7及更高版本内置的`java.net.HttpURLConnection`或者现代化的HTTP客户端库,如Apache HttpClient的最新版(如4.x或5.x)、...
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true; // 这里为了演示,实际应用应谨慎处理 } }); SSLConnectionSocketFactory sslsf = new ...
- **支持代理设置**:能够通过代理服务器访问互联网资源。 2. **使用场景** - **API接口测试**:HttpClient是接口测试的常用工具,可以方便地构造请求并验证响应。 - **Web服务客户端**:在Java应用中,...
这段代码中,我们创建了一个HttpClient实例,设置了User-Agent头(模拟浏览器行为),然后构建了一个FormUrlEncodedContent对象,包含用户名和密码。接着,我们调用PostAsync方法发送POST请求到迅雷的登录URL,并...
在Java编程环境中,RabbitMQ是一个非常流行的开源消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议工作。这个压缩包“Java获取MQ连接数的Demo.zip”提供了一个简单的Java示例,用于展示...
在这种情况下,你可能需要引入更复杂的技术,如图像识别(OCR)来解决验证码,或者使用代理IP池来避免被封禁。 在实际项目中,为了代码的可维护性和可扩展性,通常会封装这些操作到一个专门的`HttpClient`类中。...
在Java中,我们可以使用`HttpURLConnection`、`HttpClient`(如Apache HttpClient)或第三方库如`Jsoup`来构建这样的请求。 **1. 请求准备:** - 设置URL:登录页面的URL是首先需要确定的,可以通过浏览器的开发者...
- Spring CXF支持WS-Security,可以配置用户名/密码、X.509证书等安全策略。 - 使用Spring Security可以实现更高级别的安全性,如角色授权、OAuth2认证等。 8. **监控和调试** - CXF提供了丰富的日志和跟踪机制...
CXF支持WS-Security,可以实现基于用户名/密码、X.509证书等的安全认证。此外,还可以集成Spring Security进行更高级的安全控制。 七、异常处理 CXF允许自定义错误处理,可以通过全局异常处理器或在服务接口中声明...
2. 有些网站可能会有反爬虫策略,例如验证码、IP限制等,这时可能需要更复杂的处理,如使用代理IP、识别和输入验证码等。 3. 在处理POST数据时,确保数据格式正确,如使用multipart/form-data或application/x-...