Java OkHTTP(v3.0.0-RC1)带参数的Post请求
更新 我正在使用okHttp库,版本3.0.0RC-1。我有一个url,我必须发送一个带有参数的post请求。例如:Java OkHTTP(v3.0.0-RC1)带参数的Post请求,java,android,ssl,ssl-certificate,okhttp,Java,Android,Ssl,Ssl Certificate,Okhttp,更新 我正在使用okHttp库,版本3.0.0RC-1。我有一个url,我必须发送一个带有参数的post请求。例如:https://myurl.com/login?username=123456&password=12345 我有这样的代码: public String okHttpRequest(){ try { final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(
https://myurl.com/login?username=123456&password=12345
我有这样的代码:
public String okHttpRequest(){
try {
final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null,trustAllCerts, new java.security.SecureRandom());
final javax.net.ssl.SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(sslSocketFactory);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
}).build();
final OkHttpClient client = new OkHttpClient();
HttpUrl url = HttpUrl.parse("https://myUrl.com/login").newBuilder()
.addQueryParameter("username", "123456")
.addQueryParameter("password", "123456")
.build();
Request request = new Request.Builder()
.url(url)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
Log.d("Request:", "Is NOT sent " + request.toString() + " METHOD: " + request.method());
e.printStackTrace();
}
@Override
public void onResponse(Response response) throws IOException {
Log.d("Request:", "Is sent " + response.toString());
}
});
}catch(Exception e){
e.printStackTrace();
}
return "okHttp is Working!!! ";
}
每当我尝试时,它都会失败,所以onFailure方法正在执行。有什么问题?我添加请求参数是否有误?请帮助…是的,您添加的查询参数不正确。以下是应该如何做到这一点:
final OkHttpClient client = new OkHttpClient();
HttpUrl url = HttpUrl.parse("https://myUrl.com/login").newBuilder()
.addQueryParameter("password", "123456")
.addQueryParameter("username", "123456")
.build();
Request request = new Request.Builder()
.url(url)
.build();
(...)
问题在于,您在请求主体中提交数据,就像提交HTML表单一样,而不是像您所希望的那样作为查询参数。使用HttpUrl可以向URL添加查询参数
值得注意的是,您也可以简单地执行以下操作:
Request request = new Request.Builder()
.url("https://myurl.com/login?username=123456&password=12345")
.build();
因此:
- 使用
和它的生成器来创建URL和添加参数HttpUrl
- 如果需要,可以使用
创建请求的内容(就像提交的是html表单一样)FormBody
让我知道它是否适合您。尝试与邮递员检查请求,看看您的请求是否有效请学习http基础知识。。。什么是body,什么是query string…@Selvin我知道,但我不知道用okhttp的post发送请求参数的方法..用okhttp的post发送请求参数。。。然后呢?你做到了。。。但服务器可能“不理解”请求。。。它可能a)不接受邮寄b)不接受x-www-form-urlencoded@Selvin那么我如何解决这个问题呢?结果:未发送请求{method=GET,url=,tag=null}method:GET必须是POST-Request..@Alvin,尝试记录IoException并将堆栈跟踪添加到您的问题中。我将更新我的答案,使其改为使用Post请求。以下是例外:javax.net.ssl.SSLPeerUnverifiedException:Hostname myUrl.com未验证: