开发者社区> 问答> 正文

HttpURLConnection无法连接某个网站API?报错

急求救~我们公司使用了销售易crm的产品,crm开放API,最近因为做点分析,把数据取过来这边,前两周还好好的。这几天突然连接不了,我问了那边公司的人,他们开放接口给N多家公司,但是其他人没问题。

所报错误:

部分代码:

public static String getAccessToken() {
     //url	新浪和百度的可以连接返回数据,第三个str无法连接
     //String str="http://hq.sinajs.cn/list=s_sz399001";
     // String str="http://www.baidu.com";
 
     //String str="https://api.xiaoshouyi.com/authorize/token";
		  
		  try { 
		  URL url=new URL(str); 
		  
		 HttpURLConnection  con=(HttpURLConnection) url.openConnection();
		  
		  con.setDoOutput(true);// 使用 URL 连接进行输出 con.setDoInput(true);// 使用 URL
		  con.setUseCaches(false);// 忽略缓存
		  con.setRequestMethod("POST");// 设置URL请求方法
		  
		  //设置属性
		  con.setRequestProperty("Content-Type",
		  "application/x-www-form-urlencoded"); //application/octet-stream
		  con.setRequestProperty("Charset", "utf-8"); 
		  con.connect();          //此处报错,下面的没有运行。
		  
		  DataOutputStream out =new DataOutputStream(con.getOutputStream());
		  out.writeBytes("app_key=7QCqk2WPLkQ=&username=qwj@pci-suntektech.com&password=pci@suntek1601053gYYhv6f"); 
		  out.flush(); 
		  out.close();
		  
		  InputStream in= con.getInputStream();
		  BufferedReader br=new BufferedReader(new InputStreamReader(in, "utf-8"));
		  StringBuffer sb=new StringBuffer();
		  String l;
			while ((l = br.readLine()) != null) {
				sb.append(l);
			}
			System.out.println(sb.toString());
			return sb.toString();
		  }
		  catch(Exception e){
			e.printStackTrace();
		  }
		  return null;
	}


我已经尝试过的方法:

1、刚开始觉得是公司代理的原因,所以尝试不适用代理,或者换成另一个代理,均不行

2、觉得是销售易API的原因,我尝试连接了新浪和百度,能成功返回数据(也说明我网络畅通,只是单单连不了销售易API),于是联系对方开发人员,他们自己可以连接API,而且保守估计他们都实施几十几百家公司,其他公司都没问题,如果有问题早闹了,肯定马上解决的,不会一连几天,所以排除对方问题。

3、排除是验证出错,要连接上才开始验证APP_KEY,username,password等信息,现在根本连不上对方接口。

排除掉这些,只剩下错误信息,有点怀疑是系统问题,比如把对方网址加入黑名单了或者什么的,没找到如何解决。有谁能就这个报错信息教教我,感谢大神,感激涕零~~

展开
收起
爱吃鱼的程序员 2020-06-09 16:28:55 731 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    把Stringstr="https://api.xiaoshouyi.com/authorize/token";

    改成:

    Stringstr="https://api.xiaoshouyi.com/";

    回复 @木木守护神:直接在浏览器输入url都不行,说明你程序没问题https://api.xiaoshouyi.com/authorize/token这个我试过,前者浏览器直接打会返回文字。。不过不是这个原因

     你换个DNS ,换完后记得刷新下DNS缓存...当然要是你们公司内部还有一套DNS缓存那...你不要用公司的DNS


    我也以为是DNS的原因。或者公司代理,试过不使用代理。甚至叫管理员把我开放到外网环境都不行。 https的协议问题吧,换 httpClient试试。 最简单就是先用一个很简陋的Main测试

    问题解决了,是JDK的问题,JDK6使用https连接时有这个问题,换成JDK7,成功连通了。

    ps:觉得很不可思议,即使是JDK6,也支持https连接,但是不打算深究。

    2020-06-09 16:29:14
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
CUDA MATH API 立即下载
API PLAYBOOK 立即下载
传统企业的“+互联网”-API服务在京东方的实践 立即下载