java如何调用https地址类型的接口

java如何调用https地址类型的接口
java如何调用https地址类型的接口

如何通过java调用https链接的webService接口

1.打开webService链接,右键属性—》证书—》详细信息—》复制到文件,保存cer格式的文件。

2.复制下面的cmd命令,执行keytool命令,生成keystore文件,例如c:\nciic.keystore

keytool -import -alias nciic -file c:\jswszx.cer -keystore c:\nciic.keystore

它会提示输入密码,随便输入,例如:123456,回车

4.他会提示是否信任这个认证,输入Y,回车,指定目录下就会生成

nciic.keystore文件

5.修改java代码

在调用接口方法之前,添加如下代码:

System.setProperty("https://www.360docs.net/doc/fd6687858.html,.ssl.trustStore","c://nciic.keystore");

System.setProperty("java.protocol.handler.pkgs","https://www.360docs.net/doc/fd6687858.html,.ssl.internal.ww w.protocol");

java.security.Security.addProvider(new https://www.360docs.net/doc/fd6687858.html,.ssl.internal.ssl.Provider()); (注意:可以把证书放入项目中,然后nciic.keystore的路径用相对路径即可。)

eoLinker-API_Shop_猫咪大全_API接口_Java调用示例代码

eoLinker-API Shop 猫咪大全 Java调用示例代码 猫咪大全 可查询猫咪相关信息,包括品种介绍、产地、性格、寿命、价格等信息,带图片。 该产品拥有以下APIs: 1.关键字获取猫类 2.获取猫类列表 3.获取猫类详细信息 注意,该示例代码仅适用于https://www.360docs.net/doc/fd6687858.html,网站下API使用该产品前,您需要通过https://https://www.360docs.net/doc/fd6687858.html,/#/api/detail/?productID=193申请API服务 1.关键字获取猫类 package net.apishop.www.controller; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import https://www.360docs.net/doc/fd6687858.html,.HttpURLConnection; import https://www.360docs.net/doc/fd6687858.html,.MalformedURLException; import https://www.360docs.net/doc/fd6687858.html,.URL; import https://www.360docs.net/doc/fd6687858.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSONObject; /** * httpUrlConnection访问远程接口工具 */ public class Api { /** * 方法体说明:向远程接口发起请求,返回字节流类型结果 * param url 接口地址 * param requestMethod 请求方式 * param params 传递参数重点:参数值需要用Base64进行转码 * return InputStream 返回结果 */ public static InputStream httpRequestToStream(String url, String re questMethod, Map params) {

WebApi系列~通过HttpClient来调用WebApi接口

回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基于api项目的特殊性,它需要有一个完全安全的环境,所以,你的api控制器看起来有点特别,只有5个方法,而且都是标准的http方法,我觉得这种设计很不错,很清晰,而且为了实现安全性,它不支持使用传统的表单数据,取而代之的是FromBody参数,它指拿HttpRequestMessage里参数,而不是所有的Request数据,这是基于安全方面的考虑。一Api接口参数的标准性 Get方式,可以有多个重载,有多个参数 POST方式,只能有一个参数,并且用[FromBody]约束,如果有多个参数,需要以对象的方式进行传递 Put方式,只能有两个参数,其中一个是通过Request.QueryString方式进行传递的,作为要更新对象的主键,别一个是[FromBody]字段,也是一个字段,如果多个字段需要把它封装成对象 标准接口如图 二调用方,参数的标准性 在客户端进行接口调用时,我们以网页端为例,看一下网页端进行ajax跨域请求的代码

Get方式 $.ajax({ url: "http://localhost:52824/api/register", type: "GET", success: function (data) { console.log("json:" + data); } }); Post方式 $.ajax({ url: "http://localhost:52824/api/register", type: "POST", data: { '': '1' },//这里键名称必须为空,多个参数请传对象,api端参数名必须为value success: function (data) { console.log("post:" + data); } }); 三在控制台中实现Get方式获取接口数据(只有异步实现) ///

/// HttpClient实现Get请求 /// static async void dooGet() { string url = "http://localhost:52824/api/register?id=1&leval=5"; //创建HttpClient(注意传入HttpClientHandler) var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip }; using (var http = new HttpClient(handler)) { //await异步等待回应 var response = await http.GetAsync(url);

java发送http的get、post请求

package wzh.Http; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import https://www.360docs.net/doc/fd6687858.html,.URL; import https://www.360docs.net/doc/fd6687858.html,.URLConnection; import java.util.List; import java.util.Map; public class HttpRequest { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param param * 请求参数,请求参数应该是name1=value1&name2=value2 的形式。 * @return URL 所代表远程资源的响应结果 */ public static String sendGet(String url, String param) { String result = ""; BufferedReader in = null; try { String urlNameString = url + "?" + param; URL realUrl = new URL(urlNameString); // 打开和URL之间的连接 URLConnection connection = realUrl.openConnection(); // 设置通用的请求属性 connection.setRequestProperty("accept", "*/*"); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 建立实际的连接 connection.connect(); // 获取所有响应头字段 Map> map = connection.getHeaderFields(); // 遍历所有的响应头字段 for (String key : map.keySet()) { System.out.println(key + "--->" + map.get(key)); } // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader(

基于JAVA的新闻数据接口调用代码实例

基于JA V A的新闻数据接口调用代码实例 代码描述:基于JA V A的新闻数据接口调用代码实例 代码平台:聚合数据 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import https://www.360docs.net/doc/fd6687858.html,.HttpURLConnection; import https://www.360docs.net/doc/fd6687858.html,.URL; import https://www.360docs.net/doc/fd6687858.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; /** *新闻调用示例代码-聚合数据 *在线接口文档:https://www.360docs.net/doc/fd6687858.html,/docs/138 **/ public class JuheDemo { public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) Appl eWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="*************************"; //1.新闻检索 public static void getRequest1(){ String result =null; String url ="https://www.360docs.net/doc/fd6687858.html,/onebox/news/query";//请求接口地址 Map params = new HashMap();//请求参数 params.put("q","");//需要检索的关键字,请UTF8 URLENCODE params.put("key",APPKEY);//应用APPKEY(应用详细页查询)

抓包实验

:利用Wireshark软件进行数据包抓取 1.3.2 抓取一次完整的网络通信过程的数据包实验 一,实验目的: 通过本次实验,学生能掌握使用Wireshark抓取ping命令的完整通信过程的数据包的技能,熟悉Wireshark软件的包过滤设置和数据显示功能的使用。 二,实验环境: 操作系统为Windows 7,抓包工具为Wireshark. 三,实验原理: ping是用来测试网络连通性的命令,一旦发出ping命令,主机会发出连续的测试数据包到网络中,在通常的情况下,主机会收到回应数据包,ping采用的是ICMP协议。 四,验步骤: 1.确定目标地址:选择https://www.360docs.net/doc/fd6687858.html,作为目标地址。 2.配置过滤器:针对协议进行过滤设置,ping使用的是ICMP协议,抓包前使用捕捉过滤器,过滤设置为icmp,如图 1- 1

图 1-1 3.启动抓包:点击【start】开始抓包,在命令提示符下键入ping https://www.360docs.net/doc/fd6687858.html,, 如图 1-2

图 1-2 停止抓包后,截取的数据如图 1-3 图 1-3 4,分析数据包:选取一个数据包进行分析,如图1- 4

图1-4 每一个包都是通过数据链路层DLC协议,IP协议和ICMP协议共三层协议的封装。DLC协议的目的和源地址是MAC地址,IP协议的目的和源地址是IP地址,这层主要负责将上层收到的信息发送出去,而ICMP协议主要是Type和Code来识别,“Type:8,Code:0”表示报文类型为诊断报文的请求测试包,“Type:0,Code:0”表示报文类型为诊断报文类型请正常的包。ICMP提供多种类型的消息为源端节点提供网络额故障信息反馈,报文类型可归纳如下: (1)诊断报文(类型:8,代码0;类型:0代码:0); (2)目的不可达报文(类型:3,代码0-15); (3)重定向报文(类型:5,代码:0--4); (4)超时报文(类型:11,代码:0--1); (5)信息报文(类型:12--18)。

Java实现发送Http请求

Java实现发送Http请求 JDK中提供了一些对无状态协议请求(HTTP)的支持: 首先让我们先构建一个请求类(HttpRequester)。 该类封装了JAVA实现简单请求的代码,如下: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import https://www.360docs.net/doc/fd6687858.html,.HttpURLConnection; import https://www.360docs.net/doc/fd6687858.html,.URL; import java.nio.charset.Charset; import java.util.Map; import java.util.Vector; /** * HTTP请求对象 * * @author YYmmiinngg */ public class HttpRequester { private String defaultContentEncoding; public HttpRequester() { this.defaultContentEncoding = Charset.defaultCharset().name(); }

/** * 发送GET请求 * * @param urlString * URL地址 * @return 响应对象 * @throws IOException */ public HttpRespons sendGet(String urlString) throws IOException { return this.send(urlString, "GET", null, null); } /** * 发送GET请求 * * @param urlString * URL地址 * @param params * 参数集合 * @return 响应对象 * @throws IOException

HTTPS请求工具类汇总

HTTPS请求 package com.sunzk.dreamsunlight.weixin.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import https://www.360docs.net/doc/fd6687858.html,.ConnectException; import https://www.360docs.net/doc/fd6687858.html,.URL; import https://www.360docs.net/doc/fd6687858.html,.ssl.HttpsURLConnection; import https://www.360docs.net/doc/fd6687858.html,.ssl.SSLContext; import https://www.360docs.net/doc/fd6687858.html,.ssl.SSLSocketFactory; import https://www.360docs.net/doc/fd6687858.html,.ssl.TrustManager; import net.sf.json.JSONException; import net.sf.json.JSONObject; import org.apache.log4j.Logger;

import com.sunzk.dreamsunlight.weixin.certificate.MyX509 TrustManager; import com.sunzk.dreamsunlight.weixin.model.Menu; import com.sunzk.dreamsunlight.weixin.token.AccessToken; /** * * @ClassName: WeiXinHttpsUtil * * @Description: TODO(微信HTTPS请求工具类) * * @author sunzk-dreamsunlight-QQ(1131341075) * * @date 2016-11-14 上午10:05:56 * */ public class WeiXinHttpsUtil {

使用wireshark分析HTTPS流程的建立

使用wireshark分析HTTPS流程的建立

使用wireshark分析HTTPS流程的建立 摘要: https流程 一、概要 为了网站以及用户的安全性,现在很多的网站都是https,大家都知道tcp通过三次握手建立连接,并且还有很多的同学对https连接建立的流程不太明白,包括我自己,通过借助于wireshark这种抓包工具,我们可以尝试着了解一下大概的流程。 (图1) 本图是客户端(10.0.45.103)访问服务端(114.215.88.85)通过wireshark 抓包显示出来的双方交互数据,访问是通过https访问服务器上的一台nginx 服务器服务。请关注第一列的No。下文中很多时候会用no表示一次交互。 图中可以很明显的看出tcp的三次握手以及之后的TLS加密流程的建立。二、tcp的三次握手 通过流程图可以看出(也可以看图1 的19368到19370这三个编号),首先客户端向服务端发起一个SYN的请求,序号(Seq)为0,确认号(ACK)也为0,这代表是本次是由客户端发起的首次请求。本次请求的数据长度为0 然后服务端给客户端响应,此时服务端的Seq也是0,值得是服务端的第一回应,并且给客户端说,你的请求我已经收到了(ACK=1),

最后返还给客户端以后,客户端的序号+1,并且对服务端的响应做出确认,最后回给服务端,此时ACK=1,Seq=1 tcp的握手过程建立成功。 三、ssl连接的建立 通过以上可以看出,SSL也是建立在TCP的基础上的,经过tcp的三次握手,接下来才是加密信道的建立。 客户端和服务端建立安全连接大致经过以下几个步骤 1.客户端:ClientHello 2.服务端:Server Hello,Server certificate,Server Exchange,Server Hello Done 3.客户端:client Exchange 4.客户端:Application Data 5.服务端:New Session 6.服务端:Application Data 接下来看这几个步骤中具体的每一个步骤传输的内容 ClientHello client首先给服务端打招呼,对服务端说hello 应用层没什么特别的

基于JAVA的健康新闻接口调用代码实例

基于JAVA的健康新闻接口调用代码实例 代码描述:基于JA V A的健康新闻接口调用代码实例 代码平台:聚合数据 import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import https://www.360docs.net/doc/fd6687858.html,.HttpURLConnection; import https://www.360docs.net/doc/fd6687858.html,.URL; import https://www.360docs.net/doc/fd6687858.html,.URLEncoder; import java.util.HashMap; import java.util.Map; import net.sf.json.JSONObject; /** *健康资讯调用示例代码-聚合数据 *在线接口文档:https://www.360docs.net/doc/fd6687858.html,/docs/145 **/ public class JuheDemo { public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) Appl eWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="*************************"; //1.资讯分类列表 public static void getRequest1(){ String result =null; String url ="https://www.360docs.net/doc/fd6687858.html,/yi18/news/newsclass";//请求接口地址

Java网络编程(三)HttpUrlConnection与HttpClient详解(雷惊风)

HttpUrlConnection与HttpClient详解 一.概念。 在Android开发中,AndroidSDK中对HTTP提供了很好的支持,主要包括两种接口。 1.一个是Sun公司提供的库,基于标准Java接口的 HttpURLConnection,这个类封装的很少,如果使用高级功 能,如重访问/Cookie/Session等就相当不方便。它可以实现 简单的基于URL的请求与相应功能。Google在Android Api23及以后的版本中推荐使用HttpURLConnention,在后 续版本中逐渐对其进行优化完善。在2.2版本以前,一直存 在着一些bug。比如对一个可读的InputStream调用close 方法时,可能会导致连接池失效。通常我们会禁用连接池功 能。 2.另一个是Apache公司提供的的HttpClient,它提供了高效的, 最新的功能丰富的api,支持Http协议工具包,支持HTTP 最新版本和建议,是个很好的开源框架,封装了http的请求, 参数,内容体,响应等,拥有众多API,但同时HttpClient 的API数量太多,如果不破坏兼容性的情况下想对他进行扩 展很麻烦。在API 23 SDK将其去掉了。建议使用 HttpURLConnection。 以上两种联网方式都支持HTTPS协议、以流的形式进行传输、 IPv6、配置超时时间、以及连接池等功能。

二.区别。 1.功能上,HttpClient库要丰富很多,提供了很多工具,封装了http 的请求头,参数,内容体,响应,还有一些高级功能,代理、COOKIE、鉴权、压缩、连接池的处理。 2.H ttpClient高级功能代码写起来比较复杂,对开发人员的要求会高 一些,而HttpURLConnection对大部分工作进行了包装,屏蔽了不需要的细节,适合开发人员直接调用。 3.HttpURLConnection在2.3版本增加了一些HTTPS方面的改进, 4.0版本增加一些响应的缓存。 4.HttpUrlConnection直接支持GZIP压缩;HttpClient也支持,但 要自己写代码处理。 5.HttpUrlConnection直接支持系统级连接池,即打开的连接不会直 接关闭,在一段时间内所有程序可共用;HttpClient当然也能做到,但毕竟不如官方直接系统底层支持好。 6.HttpUrlConnection直接在系统层面做了缓存策略处理(4.0版本 以上),加快了重复请求的速度。 7.HttpClient 适用于web browsers, 他们是可扩展的,并且拥有大 量的稳定APIs。但是,在不破坏其兼容性的前提下很难对如此多的APIs做修改。因此,Android 团队对修改优化Apache HTTP Client表现的并不积极。

https请求的抓包方法

对于https协议的接口的抓包方法 一、使用fiddler 1.使用fiddler对浏览器访问的https接口抓包 默认设置下的fiddler是不能解密https协议的请求的内容的,在fiddler上抓到的https 协议的请求都是如下图所示,但是看不到其中的传参以及返回结果的内容: 如果想要用fiddler抓到浏览器访问的https接口,需要在fiddler做如下设置: a)进入菜单栏,Tools->Fiddler Options: b)切换到https选项卡,勾选如下选项: c)按照上面步骤勾选后,会弹出如下提示框,提示意思大概就是fiddler会生成 一个唯一的根证书,我们要配置Windows,使Windows信任这个CA证书,

所以点击Yes即可: d)点击Yes之后,Windows会马上弹出下面的弹窗,我们点击“是”,就能将 DO_NOT_TRUST_FiddlerRoot这个由fiddler生成的CA证书导入到浏览器,也就 完成了上面C步骤所述的配置Windows,使Windows信任这个CA证书的步 骤: 完成了上面的配置后,即可以在浏览器发起一个https协议的请求: 此时可以在fiddler抓到这个请求,并能看到传参内容和返回的内容

返回的内容: 2.使用fiddler对app访问的https接口抓包 首先要先在fiddler进行设置,步骤与上面的一样,但是不用导入证书到浏览器,这里不再赘述。 Android: 要使用fiddler抓到app发出的https请求,需要在app端安装fiddler生成的CA证书,在Android的app端安装fiddler生成的CA证书步骤如下: a)设置手机代理服务器,代理到自己的电脑:

java,http协议,接口

竭诚为您提供优质文档/双击可除java,http协议,接口 篇一:http接口 2.客户端:通过httpinvoker代理向服务器端发送请求,远程调用服务接口的方法 3.服务器端与客户端通信的数据需要序列化 配置服务器端和客户端的步骤 配置服务器端 1.添加springjaR文件 建议使用spring2+.jar版本 2.创建服务接口 3.创建服务接口的具体实现类 4.公开服务 配置客户端 1.添加springjaR文件 建议使用spring2+.jar版本 2.创建服务接口 3.访问服务 实例讲解

服务器端 1.服务接口:ucservice.java 它提供两项服务,查询用户信息和记录日志,如下: publicinterfaceucservice{ publicuserinfogetuserinfobyname(stringusername); publicintrecordlog(stringusername,stringpoint,strin goperate,stringdesc);} 说明:举这个列子是因为其比较有代表性,它将展示普通数据类型(int,long等)和复杂数据类型(dto等)的远程调用方式。userinfo是一个普通的dto,代码如下:publicclassuserinfoimplementsserializable{ privatestaticfinallongserialVersionuid=-69709675067 12260305l; /**用户名*/ privatestringusername; /**电子邮箱*/ privatestringemail; /**注册日期*/ privatedateregistdate; publicstringgetusername(){

Java httpclient解决方案中的中文传递

Java httpclient解决方案中的中文传递(2009-03-05 17:21:33) 标签:杂谈 1 Commons HttpClient 开源项目简介 Http 协议是一种应用十分广泛的网络应用层协议。在Java 网络编程中我们会经常碰到Http 协议编程, 虽然JDK 提供了 HttpURLConnection 编程接口对Http 协议进行支持, 但是由于协议应用本身 的复杂性, 使得在大量实际项目单纯使用JDK 进行Http编程仍然相对比较困难。针对这种情况, 开源软件组织Apach 推出了HttpClient 开源组件, 并且提供稳定持续的升级版本, 因此在实际项目中采用HttpClient 组件进行Http 协议编程是一种高效经济的解决方案。 2 Commons HttpClient 中文环境下编程常见问题 由于HttpClient 组件设计的高度灵活性及易用性, 应用HttpClient 组件进行编程本身并不复杂。但是由于Java 编程环境自身容易出现字符编码问题, 衍生于Java 语言并主要由英语语系国家技术人员推出的HttpClient 组件自然在中文环境中会存在一定的编码问题, 同时由于部分Web 浏览器及Web 服务器并未严格实现标准Http 协议规范, 使得比较严格遵循标准Http 协议规范的 Http-Client 组件在与部分浏览器及服务器进行交互时会出现少量兼容性问题。笔者在中文环境下用HttpClinet 开发校外资源访问系统的过程中碰到系列HttpClient 技术问题, 经过测试查证找到相应的解决办法, 这对解决HttpClient 编程问题, 特别是中文环境下Http-Client 编程具有较大的借鉴 作用。( 注: 本文编程的HttpClient 组件版本为: Release 3.1 Beta 1) 3 Commons HttpClient 编程的典型问题及解决办法 3.1 URL 中文参数无法识别的问题 通常情况在Commons HttpClient 编程中我们用下列语句就可以向一个目标服务器提交一个Web 请求: HttpClient client=new HttpClient(); GetMethod method = new GetMethod (url);//本示例使用Get 方法, 当然也可使用Post 方法PostMethod method//=new PostMethod(url); client.executeMethod(method); InputStream receiver=method.getResponseBodyAsStream(); 如果URL 没有中文参数,以上语句执行起来没有任何问题,但是如果URL 中含有中文字符,中文参数将无法被Web 服务器识别, 程序虽然可以正常运行, 但却 无法得到正确结果。同时返回的Http 响应头, 如果含有中文字符也将出现乱码。分析源码发现, 这是HttpClient 中的HttpElementCharset 参数( 创建HTTP headers 的字符集) 的默认值为US- ASCII, ContentCharset 参数( 创建contentbody 的字符集) 的默认值为ISO- 8859- 1 的原故, 因此需要使用下列语句改变这些参数的默认值: client = new HttpClient(); params=client.getParams(); params.setHttpElementCharset("GBK"); params.setContentCharset("GBK"); 或者使用:

java程序请求Http请求,返回其网页源文件,xml 等都可以返回

package com.sun.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import https://www.360docs.net/doc/fd6687858.html,.MalformedURLException; import https://www.360docs.net/doc/fd6687858.html,.URL; import javax.swing.JFrame; public class Resol extends JFrame { // 读取url对象所引用的web页 public void readPage(URL url) { BufferedReader reader = null; String line; StringBuffer str = new StringBuffer(); try { // 获取url输入流 reader = new BufferedReader(new InputStreamReader(url.openStream())); // 读取一行,并添加至tPage中 while ((line = reader.readLine()) != null) str.append(line); } catch (IOException ie) { } finally { try { if (reader != null) reader.close(); } catch (Exception e) { } } System.out.println(str.toString()); } public static void main(String[] args) { Resol me = new Resol(); try { me.readPage(new URL("https://www.360docs.net/doc/fd6687858.html,")); } catch (MalformedURLException e) { e.printStackTrace(); } } }

http 使用curl发起https请求

http 使用curl发起https请求 今天一个同事反映,使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed” 很明显,验证证书的时候出现了问题。 使用curl如果想发起的https请求正常的话有2种做法: 方法一、设定为不验证证书和host。 在执行curl_exec()之前。设置option $ch = curl_init(); ...... curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 方法二、设定一个正确的证书。 本地ssl判别证书太旧,导致链接报错ssl证书不正确。 我们需要下载新的ssl 本地判别文件 http://curl.haxx.se/ca/cacert.pem 放到程序文件目录 curl 增加下面的配置 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); ; curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem'); 大功告成 (本人验证未通过。。。报错信息为:SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed) 如果对此感兴趣的话可以参看国外一大神文章。 https://www.360docs.net/doc/fd6687858.html,/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected -sites/ 为了防止某天该文章被Q今复制过来。内容如下: Using cURL in PHP to access HTTPS (SSL/TLS) protected sites From PHP, you can access the useful cURL Library (libcurl) to make requests to URLs using a variety of protocols such as HTTP, FTP, LDAP and even Gopher. (If you’ve spent time on the *nix command line, most environments also have the curl command available that uses the libcurl library) In practice, however, the most commonly-used protocol tends to be HTTP, especially when usingPHP for server-to-server communication. Typically this involves accessing another web server as part of a web service call, using some method such as XML-RPC or REST to query a resource. For example, Delicious offers a HTTP-based API to manipulate and read a user’s posts. However, when trying to access a HTTPS resource (such as the delicious API), there’s a little more configuration you have to do before you can get cURL working right in PHP. The problem If you simply try to access a HTTPS (SSL or TLS-protected resource) in PHP using cURL, you’re likely to run into some difficulty. Say you have the following code: (Error handling omitted for brevity) // Initialize session and set URL. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // Set so curl_exec returns the result instead of outputting it. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Get the response and close the channel. $response = curl_exec($ch);

JAVA利用HttpClient进行POST请求(HTTPS)

JAVA利用HttpClient进行POST请求(HTTPS) 分类: java(31) jsp(1) 目前,要为另一个项目提供接口,接口是用HTTP URL实现的,最初的想法是另一个项目 用jQuery post进行请求。 但是,很可能另一个项目是部署在别的机器上,那么就存在跨域问题,而JQuery的post 请求是不允许跨域的。 这时,就只能够用HttpClient包进行请求了,同时由于请求的URL是HTTPS的,为了避 免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程。 1.写一个SSLClient类,继承至HttpClient [java]view plain copy 1.import java.security.cert.CertificateException; 2.import java.security.cert.X509Certificate; 3.import https://www.360docs.net/doc/fd6687858.html,.ssl.SSLContext; 4.import https://www.360docs.net/doc/fd6687858.html,.ssl.TrustManager; 5.import https://www.360docs.net/doc/fd6687858.html,.ssl.X509TrustManager; 6.import org.apache.http.conn.ClientConnectionManager; 7.import org.apache.http.conn.scheme.Scheme; 8.import org.apache.http.conn.scheme.SchemeRegistry; 9.import org.apache.http.conn.ssl.SSLSocketFactory; 10.import org.apache.http.impl.client.DefaultHttpClient; 11.//用于进行Https请求的HttpClient 12.public class SSLClient extends DefaultHttpClient{ 13.public SSLClient() throws Exception{ 14.super(); 15. SSLContext ctx = SSLContext.getInstance("TLS"); 16. X509TrustManager tm = new X509TrustManager() { 17.@Override 18.public void checkClientTrusted(X509Certificate[] chain, 19. String authType) throws CertificateException { 20. } 21.@Override 22.public void checkServerTrusted(X509Certificate[] chain, 23. String authType) throws CertificateException { 24. }

2.7 HTTP抓包分析

HTTP抓包分析 一:实验目的: 1、学习使用网络数据抓包软件Ethereal,对互连网进行数据抓包,巩固对所学知识的 理解 二:实验内容: 1、分析http协议请求的响应过程。 2、分析TCP的处理过程,HTTP,TCp的报文格式。 三:实验环境及工具 1、虚拟主机XP,虚拟网卡NAT,TCP/IP参数自动获取 2、安装Wireshark抓包软件 四:实验步骤 1、安装Wireshark,简单描述安装步骤。 2、打开wireshark,选择接口选项列表。或单击“Capture”,配置“option”选项。 3、设置完成后,点击“start”开始抓包,显示结果。 4、选择某一行抓包结果,双击查看此数据包具体结构 五:网络协议包数据分析 1:http请求报文分析(第8个包) 请求行:方法字段:GET,版本是http/1.1. 首部行:主机host:https://www.360docs.net/doc/fd6687858.html,;Connection:Keep-Alive,即保持持久连接;Accept-language:zh-cn,即接收语言是中文。 2.http响应报文(第55个包)

状态行:http/1.1 200 OK;请求成功。 首部行:响应Date:sat,21,Apr 2012 04:58:18 GMT ;Content-Type:text/html 指示实体主体中的对象是text/html文本;Content-Length:35593 表明了被发送对象的字节数是35593个字节。 :3:TCP报文格式分析: 报文格式:

如截图可知:源端口号:80,目的端口号3968,序号:1,确认号:424,首部长度:20 bytes,Flags=0X10(URG=0,ACK=1,PSH=0,RST=0,SYN=0,FIN=0)接收窗口大小:65112;检验和:0x8a44。 4:TCP响应(3次握手)分析: 1)服务器应用启动,进入LISTEN状态; 2)客户端向服务器端发送一个TCP报文段,该段设置SYN标识,请求跟服务器端应用同步,之后进入SYN-SENT状态,等待服务器端的响应;(第5个包) 3)服务器端应用收到客户端的SYN 段之后,发送一个TCP段响应客户端,该段设置SYN和ACK标识,告知客户端自己接受它的同步请求,同时请求跟客户端同步。之后进入 SYN-RECEIVED状态;(第6个包)

相关文档
最新文档