2017-02-02 3 views
0

Ich versuche, eine Anfrage an die Genius API, aber ich bin in einigen Problemen mit OkHTTP laufen. Das ist mein kleines Skript verwende ich den Anruf zu tätigen:Anfrage funktioniert gut in Postbote, aber ein 403 in OkHTTP

public class OkHttpScript { 

OkHttpClient client = new OkHttpClient(); 

String run(String url) throws IOException { 
    Request request = new Request.Builder() 
      .header("Authorization", "Bearer uDtfeAgTKL3_YnOxco4NV6B-WVZAIGyuzgH6Yp07FiV9K9ZRFOAa3r3YoxHVG1Gg") 
      .url(url) 
      .build(); 

    try (Response response = client.newCall(request).execute()) { 
     return response.body().string(); 
    } 
} 

public static void main(String[] args) throws IOException { 

    OkHttpScript okHttpScript = new OkHttpScript(); 

    String response = okHttpScript.run("http://api.genius.com/songs/378195/"); 

    System.out.println(response); 
} 


} 

Wenn ich dieses Skript ausführen, bekomme ich einen Fehler 403:

{"meta":{"status":401,"message":"This call requires an access_token. Please see: https://genius.com/developers"}} 

Als Referenz hier ist ein Bild von mir machen genau die gleiche Anfrage mit Postman, und es funktioniert:

Postman picture

Alle Ideen, was das Problem sein könnte?

Edit:

nicht sicher, ob das normal ist, aber wenn ich meine Anfrage Objekt auszudrucken, die, wie ich sehe keinen Hinweis darauf gebaut werden, dass es Header in der Anfrage:

Request{method=GET, url=http://api.genius.com/songs/378195/, tag=null} 

Ist das, was Ich bekomme. Könnte das ein Teil des Problems sein?

Edit2:

Nevermind, ein

System.out.println(newRequest.headers()); 

tun gibt mir, was ursprünglich Ich habe in:

Authorization: Bearer 4mfDBVzCnp2S1Fc0l0K0cfqOrQYjRrb-OHi8W1f-PPU7LNLI6-cXY2E727-1gHYR 
+0

Verwenden Sie Wireshark, um zu sehen, wie die tatsächliche HTTP-Anforderung unterschiedlich ist. –

Antwort

0

Also habe ich herausgefunden, was mein Problem war. Ich bin mir nicht sicher über die Details dahinter, aber ich hätte meine URL verwenden müssen https://api.genius.com/songs/378195/ statt http://api.genius.com/songs/378195/

Postbote scheint gut mit dem http, aber OkHttp benötigt https.

-1

Sie sollten einen Abfangjäger für okhttp so etwas wie dieses Add sollte funktionieren

How to handle auth0 403 error without adding specific code everywhere (Retrofit/okhttp/RxAndroid)

+0

Repräsentiert das nicht einfach den Anruf, wenn es fehlschlägt? Würde mir das Schreiben eines Interceptors helfen, wenn ich kein Token habe, das ich auffrischen muss? Das Token selbst bleibt in meinem Fall statisch. –

+0

Ob es ein Interceptor ist oder nicht, erklärt nicht, warum diese Anfrage nicht erfolgreich ist. –

Verwandte Themen