- 1.问题描述
- 2.问题解决
- 3.HTTP请求代码
1.问题描述 1.使用http方式请求对方服务器,返回JSON格式数据
2.由于是测试环境,网段不是同一个,对方服务器网段做了代理,我们能ping通,也能telnet
3.使用浏览器访问能正常返回JSON格式数据
4.用代码解析http请求一直报500错误,对方觉得是我们代码问题,但是我们用代码解析公网上的一些请求是正常的;而且我们将代码发给对方,让对方解析,也是正常的
2.问题解决 【HTTP500内部服务器错误】由于我们本地看不出什么问题,我们用代码请求,让对方服务器进行抓包调试。
1.对方服务器让我们将请求的Content-Type改为application/json,请求仍然有问题
Error-Reason:CHARACTER:error="json";
error_description*=UTF-8''Expected one of: <<{,[>> but got: <>
2.对方查了下,发现服务器Content-Type填什么都报错,application/x-www-form-urlencoded、application/json都报错,只有不填才能正确,空串也不行;我们就说http请求头有个默认值就是x-www-form-urlencoded,对方服务器端改了这个Content-Type的请求头,我们代码就能正常访问到JSON数据了
3.HTTP请求代码
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlName = url + "?" + param;
URL realUrl = new URL(urlName);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible;
MSIE 6.0;
Windows NT 5.1;
SV1)");
// 建立实际的连接
conn.connect();
// 获取所有响应头字段
Map> map = conn.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(
new InputStreamReader(conn.getInputStream(),"UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
推荐阅读
- 网络夺命连环问系列|网络夺命连环问5--HTTP怎么传输大文件()
- Android笔记|Retrofit2.5是如何解析在接口类中定义的方法()
- okhttp|你想要的系列(网络请求框架OkHttp3全解系列 - (四)拦截器详解2:连接、请求服务(重点))
- Android消息推送MQTT
- 前端|(2.6w字)网络知识点灵魂拷问——前端面试必问
- 分布式|理论 | 优雅的构建一个健壮的API接口
- datepicker 日期控件,两个文本框共一个日期控件
- HTTP报文头Accept和Content-Type总结
- vue|vue 前后端分离自定义的状态码如何获取res.data
- http 301、302、304、400、405、415状态码解释