请求微信api(支持代理)
来源:互联网 发布:白金数据电影网盘 编辑:程序博客网 时间:2024/06/11 09:56
微信给的demo中HttpsRequest笔者使用的时候不好使,索性只能以此为基础进行改造。
改造后的HttpsRequest如下:支持代理
import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.UnrecoverableKeyException;import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.conn.scheme.PlainSocketFactory;import org.apache.http.conn.scheme.Scheme;import org.apache.http.conn.scheme.SchemeRegistry;import org.apache.http.conn.ssl.SSLSocketFactory;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;import org.apache.http.params.BasicHttpParams;import org.apache.http.params.CoreConnectionPNames;import org.apache.http.params.HttpParams;import org.apache.http.util.EntityUtils;import com.tencent.service.IServiceRequest;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.DomDriver;import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;/** * */public class HttpsRequests implements IServiceRequest{ // 连接超时时间,默认10秒 private int socketTimeout = 10000; // 传输超时时间,默认30秒 private int connectTimeout = 30000; // HTTP请求器 private DefaultHttpClient httpClient; public HttpsRequests() throws Exception { KeyStore keyStore = KeyStore.getInstance("PKCS12"); // 根据规则查找商户对应证书 FileInputStream instream = new FileInputStream(new File(Configure.getCertLocalPath()));// 加载本地的证书进行https加密传输 try { // 证书密码默认为mchId keyStore.load(instream, Configure.getCertPassword().toCharArray());// 设置证书密码 } catch (Exception e) { throw new RuntimeException("init throw Exception", e); } finally { try { instream.close(); } catch (IOException e) { } } SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); // 证书密码默认为mchId SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore, Configure.getCertPassword()); socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); Scheme sch = new Scheme("https", socketFactory, 443); registry.register(sch); // 根据默认超时限制初始化requestConfig HttpParams params = new BasicHttpParams(); params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, connectTimeout); params.setParameter(CoreConnectionPNames.SO_TIMEOUT, socketTimeout); httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager(params, registry), params); // //TODO 设置代理,生产环境需要去掉 // HttpHost proxy = new HttpHost("代理地址", 8080); // CredentialsProvider credsProvider = new BasicCredentialsProvider(); // //TODO user\pwd改为代理用户密码 // UsernamePasswordCredentials creds = new UsernamePasswordCredentials("用户名", "密码"); // credsProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), creds); // httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY, proxy); // httpClient.setCredentialsProvider(credsProvider); } /** * 通过Https往API post xml数据 * * @param url * API地址 * @param xmlObj * 要提交的XML数据对象 * @return API回包的实际数据 * @throws IOException * @throws KeyStoreException * @throws UnrecoverableKeyException * @throws NoSuchAlgorithmException * @throws KeyManagementException */ public String sendPost(String url, Object xmlObj, int flag) { String result = null; HttpPost httpPost = new HttpPost(url); // 将要提交给API的数据对象转换成XML格式数据Post给API String postDataXML = xmlObj.toString(); if (flag == 0) { XStream xStreamForRequestPostData = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_"))); //将要提交给API的数据对象转换成XML格式数据Post给API postDataXML = xStreamForRequestPostData.toXML(xmlObj); } try { // 得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别 StringEntity postEntity = new StringEntity(postDataXML, "UTF-8"); httpPost.addHeader("Content-Type", "text/xml"); httpPost.setEntity(postEntity); HttpResponse response = ((HttpClient) httpClient).execute(httpPost); int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) { Header locationHeader = response.getFirstHeader("location"); String location = null; if (locationHeader != null) { location = locationHeader.getValue(); int index = location.indexOf("#"); String new_s = location.substring(0, index) + location.substring(index + 16); return sendPost(new_s, xmlObj, flag);// 用跳转后的页面重新请求。 } } HttpEntity entity = response.getEntity(); result = EntityUtils.toString(entity, "UTF-8"); } catch (Exception e) { throw new RuntimeException("http get throw Exception", e); } finally { httpPost.abort(); } return result; } public static void main(String[] args) throws Exception { HttpsRequests hr = new HttpsRequests(); String r = hr.sendPost("", ""); System.out.println(r); }}public interface IServiceRequest{ //Service依赖的底层https请求器必须实现这么一个接口 public String sendPost(String api_url, Object xmlObj, int flag) throws UnrecoverableKeyException, KeyManagementException, NoSuchAlgorithmException, KeyStoreException, IOException;
0 0
- 请求微信api(支持代理)
- jeewx-api 1.0.5 版本发布,微信SDK接口封装(支持微信第三方开放平台)
- 服务器请求微信后台(api.weixin.qq.com)过慢处理
- Winet API 支持HTTPP/SOCKS代理
- java中的post请求之raw请求--微信api调用java代码示例
- [原]java中的post请求之raw请求--微信api调用java代码示例
- 微信人生代理
- 微信网页支持
- HTTP又被弃!微信公众号API仅支持HTTPS调用
- 微信WeixinJSBridge API
- 微信API
- 微信WeixinJSBridge API
- 微信WeixinJSBridge API
- 微信相关API
- 微信WeixinJSBridge API
- 微信WeixinJSBridge API
- 微信WeixinJSBridge API
- 微信WeixinJSBridge API
- android studio 调试您的应用
- 在POM配置Maven plugin提示错误“Plugin execution not covered by lifecycle configuration”的解决方案
- 使用XStream实现Java对象与XML之间的快速互转
- 二维高斯曲面拟合法求取光斑中心及算法的C++实现
- orbslam2的基础理论(一)
- 请求微信api(支持代理)
- Oracle(1)安装及账户解锁
- Lambda表达式
- Repo的理解及用法小结(1)
- kafka-topics.sh --describe 说端口被占用了。
- AWS踩坑指南
- easyui中checkbox全选全不选的时不处理最后一行的实现
- 杭电 1087 Super Jumping! Jumping! Jumping!
- Android捕获 ListView 每一个item的点击事件