2016-10-04 2 views
0

Ich weiß nicht warum, aber die Post, die ich mit Vertex tun, funktioniert einfach nicht. Die ganze Zeit ist der Fehler 404.
Der gleiche Link und Körper, den ich mit reinem Java verwendet habe, und ich habe die Antwort vom Server bekommen. Was mache ich falsch?Vertx POST funktioniert nicht -> Fehler 404

Ich mache im Grunde Authentifizierung mit Azure, und für die Antwort sollte ich einen JSON mit Token und anderen Informationen erhalten. Mit reinem Java funktioniert das, aber wir müssen es mit Vertex machen lassen.

EDIT - dieser Code funktioniert - ich JSON zurück zu bekommen, ist aber nicht VertX

String url = "https://login.microsoftonline.com/common/oauth2/token"; 
URL obj = null; 
obj = new URL(url); 
HttpsURLConnection con = null; 
con = (HttpsURLConnection) obj.openConnection(); 

//add reuqest header 
con.setRequestMethod("POST"); 
con.setRequestProperty("User-Agent", USER_AGENT); 
con.setRequestProperty("Host", "login.microsoftonline.com"); 
con.setRequestProperty("Cache-Control", "no-cache"); 
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

// Send post request 
con.setDoOutput(true); 
DataOutputStream wr = null; 

wr = new DataOutputStream(con.getOutputStream()); 
wr.writeBytes(urlParameters); 
wr.flush(); 
wr.close(); 

int responseCode = 0; 
responseCode = con.getResponseCode(); 

System.out.println("\nSending 'POST' request to URL : " + url); 
System.out.println("Post parameters : " + urlParameters); 
System.out.println("Response Code : " + responseCode); 

BufferedReader in = null; 
in = new BufferedReader(
        new InputStreamReader(con.getInputStream())); 

String inputLine; 
StringBuffer response = new StringBuffer(); 

while ((inputLine = in.readLine()) != null) { 
    response.append(inputLine); 
} 

in.close(); 

//print result 
System.out.println(response.toString()); 
+0

Können Sie Ihre Frage bearbeiten, um Ihren Code mit dem JDK HttpClient zu zeigen, damit wir vergleichen können? – tsegismont

+0

Und wo genau bekommen Sie den 404? Bekommst du das von 'login.windows.net' zurück? –

+0

System.out.println (res.statusCode()); gib mir 404, aber ich bin mir nicht sicher, ob die anfrage auch an login.windows.net kam .... ich bin mir nicht sicher, ob es überhaupt außerhalb meines netzwerks gesendet wurde. – user155293

Antwort

1

Es scheint, dass das Problem durch Anfordern einer HTTPS-URL verursacht wurde, ohne SSL aktivieren und den 443-Port angeben. Vert.x httpclient unterstützt HTTP standardmäßig, um auf den Port 80 eines Webhosts zuzugreifen. Sie müssen die SSL-Unterstützung für httpclient über HttpClientOptions aktivieren.

Bitte versuchen Sie, den folgenden Code anstelle Ihres zu verwenden.

HttpClient client = vertx.createHttpClient(new HttpClientOptions().setSsl(true).setTrustAll(true)); 
HttpClientRequest request = client.post(443, "login.windows.net", "/common/oauth2/token").handler(res->{ 
       System.out.println(res.statusCode()); 
    }).putHeader(HttpHeaders.CONTENT_LENGTH,String.valueOf(buffer.length())) 
.putHeader(HttpHeaders.CONTENT_TYPE,"application/x-www-form-urlencoded").write(buffer); 
request.end(); 

Als Referenzen, sehen Sie bitte die offizielle doc http://vertx.io/docs/vertx-core/java/#_using_https_with_vert_x und das Codebeispiel in GitHub https://github.com/vert-x3/vertx-examples/blob/master/core-examples/src/main/java/io/vertx/example/core/http/https/Client.java.

+0

perfekt, es funktioniert! – user155293

+0

OK, schöner Fang. Es scheint, dass Sie 'client.postAbs (" https://login.windows.net/common/oauth2/token ")' verwenden müssen, wenn Sie eine absolute URL angeben. Andernfalls behandelt der Vert.x HttpClient den Zeichenfolgenparameter als relativen URI und stellt eine Verbindung zum standardmäßigen HttpClient-Host und -Port her. – tsegismont