2017-02-02 3 views
0

Я пытаюсь сделать запрос к Genius API, но я столкнулся с некоторыми проблемами, используя OkHTTP. Это мой небольшой скрипт я использую, чтобы сделать вызов:Запросить работу в почтальоне, но получить 403 в 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); 
} 


} 

Когда я запускаю этот сценарий, я получаю 403 ошибку:

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

Для справки, здесь картина меня делает точно такой же запрос с Почтальон, и она работает:

Postman picture

Любые идеи о том, что может быть проблема?

Edit:

Не уверены, если это нормально, но когда я печатаю мой объект запроса, который будет построен, я не вижу никаких признаков того, что есть заголовки в запросе:

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

ли что Я получил. Может ли это быть частью проблемы?

Edit2:

Nevermind, делая

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

дает мне то, что я изначально поставил в:

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

Попробуйте использовать Wireshark, чтобы узнать, как отличается фактический HTTP-запрос. –

ответ

0

Итак, я понял, в чем была моя проблема. Я не уверен в деталях позади этого, но я должен был использовать мой URL-адрес, имеет https://api.genius.com/songs/378195/ вместо http://api.genius.com/songs/378195/

Почтальон кажется прекрасным с http, но OkHttp необходимо https.

-1

Вы должны добавить перехватчик для okhttp что-то, как это должно работать

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

+0

Разве это не просто повторный вызов, когда он терпит неудачу? Будет ли писать перехватчик, если у меня нет какого-то токена, который мне нужно обновить? Сам токен остается статичным в моем случае. –

+0

Независимо от того, перехватчик не объясняет, почему этот запрос не преуспевает. –