Java 从OkHttp转到HttpURLConnection

Java 从OkHttp转到HttpURLConnection,java,android,httpurlconnection,okhttp,Java,Android,Httpurlconnection,Okhttp,出于库兼容性问题的原因,我希望使用HttpURLConnection调用API上的请求。 以下是我使用OkHttp获取令牌访问的代码: private void getAccessToken(){ OkHttpClient OkHttpClient=新的OkHttpClient(); RequestBody RequestBody=新建FormEncodingBuilder()。添加(“授权类型”、“授权码”) .add(“client_id”,“1568xxxxxxxxxxxxxxxxxxjr

出于库兼容性问题的原因,我希望使用HttpURLConnection调用API上的请求。 以下是我使用OkHttp获取令牌访问的代码:

private void getAccessToken(){
OkHttpClient OkHttpClient=新的OkHttpClient();
RequestBody RequestBody=新建FormEncodingBuilder()。添加(“授权类型”、“授权码”)
.add(“client_id”,“1568xxxxxxxxxxxxxxxxxxjro.apps.googleusercontent.com”)
.添加(“客户机密”,“AME0XXXXXXXXXX”)
.add(“重定向uri”,“”)
.add(“代码”,服务器代码)
.build();
Request Request=newrequest.Builder()
.url(“https://www.googleapis.com/oauth2/v4/token")
.post(请求主体)
.build();
okHttpClient.newCall(request).enqueue(new Callback(){
@凌驾
公共void onFailure(请求,IOE异常){
日志i(“服务器代码”、“故障”);
}
@凌驾
public void onResponse(Response-Response)引发IOException{
试一试{
JSONObject=newJSONObject(response.body().string());
token=jsonObject.optString(“访问令牌”);
tokenExpired=SystemClock.elapsedRealtime()+jsonObject.optLong(“expires_in”)*1000;
Log.i(“severcode”,String.valueOf(token));
createGooglePhotosClient();
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
所以我想知道如何获得requestbody的等价物以在setRequestProperty()中传递它


感谢您的帮助

请求正文不是请求属性(标头),它是请求正文,如果没有OkHttp或其他支持库,您必须自己对其进行格式化,对需要编码的任何特殊字符进行编码等

String requestBody = "grant_type=authorization_code&client_id=1568xxxxxxxxxxxxxxxxxjro.apps.googleusercontent.com&" 
      + "client_secret=AMe0xxxxxxxxxxxx&redirect_uri=&code=" + serverCode + "\n\n";
byte[] requestBodyBytes = requestBody.getBytes("UTF-8");
获得请求主体后,将其写入连接的输出流。例如:

connection.setRequestProperty("content-type", "application/x-www-form-urlencoded");
connection.setDoOutput(true);
out = connection.getOutputStream();
out.write(requestBodyBytes)
out.flush();

好的,很好!附加问题:OkHttp和OkHttp3之间的区别是什么。。我从API调用的世界开始:)OkHttp是Square中HTTP客户机的名称。它有几个版本,OkHttp3指的是版本3.x.y